memcache

memcache和redis一样,属于内存数据库。
http报文到达工作线程,由memcache的libevent机制,把报文放到消息队列,然后通过http协议,比如libcurl解析,得到报文请求数据部分,根据请求访问memcached服务器(即调用memcached API),访问数据库。

使用libmemcached库
target_link_libraries(test memcached)
例子
#include<libmemcached/memcached.h>

int main()
{
    //后端建立对memcached的连接(127.0.0.1表示memcached在本主机上,不需要经过网络传播)
    memcached_st *memc;
    memcached_return rc;
    memcached_server_st *server;
    time_t expiration;
    uint32_t flags;

    memc = memcached_create(NULL);
    server = memcached_server_list_append(NULL,"localhost",11211,&rc);//向list中添加所有需要连接的服务器
    //servers= memcached_servers_parse("127.0.0.1:12300");
    rc=memcached_server_push(memc,server);//把list中的信息导入memc,并创建与list中所有服务器的连接
    memcached_server_list_free(server);//销毁list
    //memcached_server_free(servers);  

    string key = "key";
    string value = "value";
    size_t value_length = value.length();
    size_t key_length = key.length();

    //增、改
    //memcached中如果存在该键,则利用新值去替换,否则将该记录写入memcached中。
    rc=memcached_set(memc,key.c_str(),key.length(),value.c_str(),value.length(),expiration,flags);
    if(rc==MEMCACHED_SUCCESS)
    {
        cout<<"Save data:"<<value<<" sucessful!"<<endl;
    }
    
    //增
    rc=memcached_add(memc,key.c_str(),key.length(),value.c_str(),value.length(),expiration,flags);
    if(rc==MEMCACHED_SUCCESS)
    {
        cout<<"Save data:"<<value<<" sucessful!"<<endl;
    }
    
    //改
   	 //如果memcached中存在该键,发生错误;否则将该记录添加进memcached中
    rc = memcached_replace(memc,key.c_str(),key.length(),value.c_str(),value.length(), expiration,flags);
    if(rc==MEMCACHED_SUCCESS)
    {
        cout<<"modify data:"<<value<<" sucessful!"<<endl;
    }

    //查
    char* result = memcached_get(memc,key.c_str(),key_length,&value_length,&flags,&rc);
    if(rc == MEMCACHED_SUCCESS)
    {
        cout<<"Get value:"<<result<<" sucessful!"<<endl;
    }

    //删
    rc=memcached_delete(memc,key.c_str(),key_length,expiration);
    if(rc==MEMCACHED_SUCCESS)
    {
        cout<<"Delete key:"<<key<<" sucessful!"<<endl;
    }
    
    // 给服务器发送flush_all命令
    ret = memcached_flush(memc, 0);
    if (ret != MEMCACHED_SUCCESS) {
        cout << "memcached_flush failed." << endl;
        return 1;
    }
    
    //断开连接
		 memcached_quit (memcached_st *ptr);	
    memcached_free(memc);
    return 0;

}

设置memcached属性

memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 0);
memcached_behavior_set(memc,MEMCACHED_BEHAVIOR_DISTRIBUTION,MEMCACHED_DISTRIBUTION_CONSISTENT);
memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_RETRY_TIMEOUT, 20) ;
memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_REMOVE_FAILED_SERVERS, 1) ;
memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_SERVER_FAILURE_LIMIT, 5) ;
memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_AUTO_EJECT_HOSTS, true) ;

/*
memcached属性,memcached_behavior_set()用于设定这些属性的值

MEMCACHED_BEHAVIOR_BINARY_PROTOCOL
MEMCACHED_BEHAVIOR_DISTRIBUTION
MEMCACHED_BEHAVIOR_RETRY_TIMEOUT
MEMCACHED_BEHAVIOR_REMOVE_FAILED_SERVERS
MEMCACHED_BEHAVIOR_SERVER_FAILURE_LIMIT
MEMCACHED_BEHAVIOR_AUTO_EJECT_HOSTS
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值