封装 libmemcached 构建 memcached 客户端
来源:互联网 发布:淘宝怎么使用不了花呗 编辑:程序博客网 时间:2024/05/16 15:25
代码如下:
1、构建服务器连接
MemcachedClient::MemcachedClient(const char *opt_servers) { mc = memcached_create(NULL); if(mc == NULL) { cout << "Error: memcached_create fail " << endl; exit(-1); } memcached_server_st *servers =memcached_servers_parse(opt_servers); memcached_return_t ret = memcached_server_push(mc,servers); memcached_server_list_free(servers); if(ret != MEMCACHED_SUCCESS) { cout << "Error: memcached_server_list_append fail " << memcached_strerror(mc,ret) << endl; exit(-1); } if(ret != MEMCACHED_SUCCESS) { cout << "Error: memcached_server_push fail "<< memcached_strerror(mc,ret)<< endl; exit(-1); }}
其中opt_servers格式为host1:port1,host2:port2......
该方法会构建一个客户端memcached_st *mc;与服务器列表建立连接,在操作memcached服务器时,客户端会根据key值来找到合适的服务器
2、写入数据
int MemcachedClient::put(const string &key,const string &value,long timeout) { memcached_return_t ret; ret = memcached_set(mc,key.c_str(),key.length(),value.c_str(),value.length(),timeout,0); if(ret == MEMCACHED_SUCCESS){ return 0; } else { cout << "Error: set key fail " << memcached_strerror(mc,ret) << endl; return 1; }}
3、获取数据
pair<int,string> MemcachedClient::get(const string &key) { memcached_return_t ret; size_t len ; string value; unsigned int flag; char *result = memcached_get(mc,key.c_str(),key.length(),&len,&flag,&ret); if(ret == MEMCACHED_SUCCESS){ value = string(result); free(result); return make_pair<int,string>(1,value); } else if(ret == MEMCACHED_NOTFOUND){ cout << " No value is fetched!" << endl; return make_pair<int,string>(0,value); } else { cout << "Error: get key fail" << memcached_strerror(mc,ret) << endl; return make_pair<int,string>(-1,value); }}
4、获取一组数据
vector<string> MemcachedClient::mget(const char *keys[], int keys_array_len){ vector<string> result; int i = 0; size_t key_len_array[keys_array_len]; for(i=0; i < keys_array_len ; i++){ key_len_array[i]=strlen(keys[i]); } char return_key[MEMCACHED_MAX_KEY]; char *return_value; size_t return_value_length; size_t return_key_length; uint32_t flags; memcached_return_t rc = memcached_mget(mc,keys,key_len_array,keys_array_len); while((return_value=memcached_fetch(mc,return_key,&return_key_length,&return_value_length,&flags,&rc))){ if(rc==MEMCACHED_SUCCESS){ result.push_back(return_value); }else{ cout << "ret num is : " << rc << endl; } } return result;}
5、删除数据
int MemcachedClient::delete(const string &key) { memcached_return_t ret; ret = memcached_delete(mc,key.c_str(),key.length(),0); if(ret == MEMCACHED_SUCCESS) return 0; else { cout << "Error: set key fail "<< memcached_strerror(mc,ret)<< endl; return 1; }}
6、析构函数
MemcachedClient::~MemcachedClient() { memcached_free(this->mc);}
测试:
int main(int arc, char* argv[]){ //string key="firstData"; const char * keys[] = {"firstData","key1","key2"}; //const char * keys[] = {"Firstkey"}; const int keys_array_length = sizeof(keys)/sizeof(keys[0]); MemcachedClient firstcache(argv[1]); int i = 0; for(i=0;i<keys_array_length;i++){ firstcache.Set(keys[i],"this is a %d test!",180); } pair<int,string> result = firstcache.Get(keys[0]); vector<string> result1 ; result1 = firstcache.mget(keys,keys_array_length); for(vector<string>::size_type ix =0; ix != result1.size(); ++ix){ cout << " mget :::" <<result1[ix] << endl; }}
安装libevent
安装memcached
执行memcached -u root -p 11211 -m 2048m -d
出现:
memcached: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory
通过命令
LD_DEBUG=libs /usr/local/bin/memcached -v
7022: find library=libevent-2.0.so.5 [0]; searching
7022: search cache=/etc/ld.so.cache
7022: search path=/lib64/tls/x86_64:/lib64/tls:/lib64/x86_64:/lib64:/usr/lib64/tls/x86_64:/usr/lib64/tls:/usr/lib64/x86_64:/usr/lib64 (system search path)
7022: trying file=/lib64/tls/x86_64/libevent-2.0.so.5
7022: trying file=/lib64/tls/libevent-2.0.so.5
7022: trying file=/lib64/x86_64/libevent-2.0.so.5
7022: trying file=/lib64/libevent-2.0.so.5
7022: trying file=/usr/lib64/tls/x86_64/libevent-2.0.so.5
7022: trying file=/usr/lib64/tls/libevent-2.0.so.5
7022: trying file=/usr/lib64/x86_64/libevent-2.0.so.5
7022: trying file=/usr/lib64/libevent-2.0.so.5
7022:
/usr/local/bin/memcached: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory
则建立链接
ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5
安装libmemcached,目前版本为1.0.4
install libmemcached
./configuration
make
make test
make install
g++ -o test test.cpp -L/usr/local/lib -lmemcached
如果命令失败,则执行
sudo ln -s /usr/local/lib/libmemcached.so.9 /usr/lib64/libmemcached.so.9
- 封装 libmemcached 构建 memcached 客户端
- 封装 libmemcached
- memcached,libmemcached,python-libmemcached安装
- install php memcached libmemcached
- 使用libmemcached访问Memcached
- memcached libmemcached 下载安装
- c libmemcached连接memcached
- 【Memcached】libmemcached API使用
- Memcached/Libmemcached使用经验总结(一)
- libmemcached一致性hash算法详解(1)----php-memcached客户端一致性哈希与crc算法共用产生的bug分析
- 使用libmemcached的c++客户端
- 使用libmemcached的c客户端
- 基于libmemcached,php扩展memcached的安装
- Memcached and libmemcached Installation on Solaris 11
- memcached 和libmemcached 安装及关系
- libmemcached支持连接池访问memcached
- linux 安装memcached libmemcached libevent freetds
- libmemcached的C-API访问memcached server
- SQL Server游标的使用【转】
- 2012.2.24
- GNU-ld链接脚本浅析
- 使用CSS3构建Ajax加载动画
- 二叉树1
- 封装 libmemcached 构建 memcached 客户端
- sql语句优化之SQL Server
- hibernate1.1
- 第二章 存储器映射
- 命里有时终须有,命里无时莫强求
- 存储过程的分页
- hibernate1.2
- 黑马程序员---枚举的详解
- 利用CSS3特性巧妙实现漂亮的DIV箭头