读书人

memcached 存取有关问题

发布时间: 2013-09-08 15:21:21 作者: rapoo

memcached 存取问题
c代码


#include <unistd.h>
#include <libmemcached/memcached.h>
#include <string.h>
#include <stdio.h>
#include <stddef.h>
#include <stdint.h>
#include <time.h>
int main(int argc ,char ** argv)
{
memcached_st * ms;
ms=memcached_create(NULL);
time_t expiration;
uint32_t flags;

memcached_return rc;
memcached_server_st * server;
//conncet to the server
server=memcached_server_list_append(NULL,"localhost",11211,&rc);
memcached_server_push(ms,server);

memcached_server_list_free(server);

char key[]="key";
char value[]="value";
size_t keylength=sizeof(key);
size_t valuelength=sizeof(value);

printf("before set data keylength:%d valuelength:%d\n",keylength,valuelength);
//save data
rc=memcached_set(ms,key,keylength-1,value,valuelength-1,expiration,flags);
if(rc==MEMCACHED_SUCCESS)
printf("save data successful!\n");

//get data
char * result=memcached_get(ms,key,valuelength-1,&valuelength,&flags,&rc);
if(rc==MEMCACHED_SUCCESS)
printf("get value:%s\n",result);

//delete data
rc=memcached_delete(ms,key,keylength-1,expiration);
if(rc==MEMCACHED_SUCCESS)
printf("delete key:%s\n",key);

//free
memcached_free(ms);

return 0;

}


可以存成功,但是程序中取不到


c++代码

#include <libmemcached/memcached.h>
#include <string>
#include <iostream>

using namespace std;

int main(int argc ,char ** argv)
{
memcached_st * ms;
ms=memcached_create(NULL);


time_t expiration;
uint32_t flags;

memcached_return rc;
memcached_server_st * server;
//conncet to the server
server=memcached_server_list_append(NULL,"localhost",11211,&rc);
memcached_server_push(ms,server);

memcached_server_list_free(server);

string key="key";
string value="value";
size_t keylength=key.length();
size_t valuelength=value.length();

cout<<"before set data keylength: "<<keylength<<" valuelength:"<<valuelength<<endl;
//save data
rc=memcached_set(ms,key.c_str(),keylength,value.c_str(),valuelength,expiration,flags);
if(rc==MEMCACHED_SUCCESS)
cout<<"save data successful!"<<endl;

//get data
char * result=memcached_get(ms,key.c_str(),valuelength,&valuelength,&flags,&rc);
if(rc==MEMCACHED_SUCCESS)
cout<<"get value: "<<result<<endl;

//delete data
rc=memcached_delete(ms,key.c_str(),keylength,expiration);
if(rc==MEMCACHED_SUCCESS)
cout<<"delete key: "<<key<<endl;

//free
memcached_free(ms);

return 0;

}


有时可以成功,有时不可以

memcached的启动命令是这样写的 ./memcached -p11211 -uroot -d -m80
现在不明白为什么取不出来,我在telnet里取有时也得不到,但是追踪代码是存成功了,求人讲解,多谢了, memcached
[解决办法]
我都是自己实现的memcached异步库,官方的太烂了。
------解决方案--------------------


memcached源码里有协议头文件, 你只需要设计API和网络通信.

读书人网 >UNIXLINUX

热点推荐