memcached测试代码(包含memcached_cas的用法)

#include<stdio.h> #include <iostream> #include <string> #include <map> #include "libmemcached/memcached.h" using namespace std; int main() { char szIp[] = "10.0.0.1"; int iPort = 11211; memcached_st *pstMCache = memcached_create(NULL); int iResult = memcached_server_add(pstMCache, szIp, iPort); //支持多台cache的分布式 //使用二进制协议传输 iResult = memcached_behavior_set(pstMCache, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 1); if (iResult != MEMCACHED_SUCCESS) { printf("memcached_server_add fail %s:%d", szIp, iPort); return -1; } //使用Consistent hashing算法将key分配到不同机器的不同位置 iResult = memcached_behavior_set(pstMCache, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED, 1); if (iResult != MEMCACHED_SUCCESS) { printf("[%s]Error:memcached_behavior_set MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED fail", __FUNCTION__); return -2; } //使用NO-BLOCK,防止memcache倒掉时挂死 iResult = memcached_behavior_set(pstMCache,MEMCACHED_BEHAVIOR_NO_BLOCK, 1); if (iResult != MEMCACHED_SUCCESS) { printf("[%s]Error:memcached_behavior_set MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED fail", __FUNCTION__); return -3; } memcached_return rc; string key = "10000"; string val = "测试内容1"; rc = memcached_set(pstMCache, key.c_str(), key.size(), val.c_str(), val.size(), 0, 0); if (rc == MEMCACHED_SUCCESS) { //set成功,进行get unsigned int flags = 0; char *mc_val = NULL; size_t val_len = 0; mc_val = memcached_get(pstMCache, key.c_str(), key.size(), &val_len, &flags, &rc); if (rc == MEMCACHED_SUCCESS) { printf("buffer:%s|len:%Zd|cas:%ld/n", mc_val, val_len, pstMCache->result.item_cas); if ( mc_val != NULL ){ free(mc_val); mc_val = NULL; } } else { if ( mc_val != NULL ){ free(mc_val); mc_val = NULL; } string err = memcached_strerror(pstMCache, rc); printf("err:%s/n", err.c_str()); return -4; } string val1 = "测试内容2"; //做了并发容错的memcached_cas 写操作,服务器维持了一个cas序列号,每次调用memcached_cas时,会判断之前get出来的cas是否发生了变化,变化了的话,说明已经被其他程序给修改了 rc= memcached_cas(pstMCache, key.c_str(), key.size(), val1.c_str(), val1.size(),0, 0, pstMCache->result.item_cas/*这个值是唯一序列*/); if (rc == MEMCACHED_SUCCESS) { printf("rc:%d/n", rc); } else { string err = memcached_strerror(pstMCache, rc); printf("err:%s/n", err.c_str()); } mc_val = memcached_get(pstMCache, key.c_str(), key.size(), &val_len, &flags, &rc); if (rc == MEMCACHED_SUCCESS) { printf("buffer:%s|len:%Zd/n", mc_val, val_len); } else { string err = memcached_strerror(pstMCache, rc); printf("err:%s/n", err.c_str()); return -4; } } else { string err = memcached_strerror(pstMCache, rc); printf("err:%s/n", err.c_str()); return -5; } return 0; }

你可能感兴趣的:(String,function,测试,memcached,null,behavior)