memcached 测试代码

转载请注明来源:https://www.cnblogs.com/hookjc/


  1. #include<stdio.h>  
  2. #include <iostream>  
  3. #include <string>  
  4. #include <map>  
  5. #include <libmemcached/memcached.h>
  6.   
  7. using namespace std;  
  8. int main()  
  9. {  
  10.         char szIp[] = "127.0.0.1";  
  11.         int iPort = 11211;  
  12.         memcached_st  *pstMCache = memcached_create(NULL);  
  13.         int iResult = memcached_server_add(pstMCache, szIp, iPort); //支持多台cache的分布式  
  14.   
  15.         //使用二进制协议传输  
  16.         iResult = memcached_behavior_set(pstMCache, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 1);  
  17.         if (iResult != MEMCACHED_SUCCESS)   
  18.         {  
  19.             printf("memcached_server_add fail %s:%d", szIp, iPort);  
  20.             return -1;  
  21.         }  
  22.   
  23.         //使用Consistent hashing算法将key分配到不同机器的不同位置  
  24.         iResult = memcached_behavior_set(pstMCache, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED, 1);  
  25.         if (iResult != MEMCACHED_SUCCESS)   
  26.         {  
  27.             printf("[%s]Error:memcached_behavior_set MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED fail", __FUNCTION__);  
  28.             return -2;  
  29.         }     
  30.           
  31.         //使用NO-BLOCK,防止memcache倒掉时挂死          
  32.         iResult = memcached_behavior_set(pstMCache,MEMCACHED_BEHAVIOR_NO_BLOCK, 1);  
  33.         if (iResult != MEMCACHED_SUCCESS)   
  34.         {  
  35.             printf("[%s]Error:memcached_behavior_set MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED fail", __FUNCTION__);  
  36.             return -3;  
  37.         }     
  38.   
  39.         memcached_return rc;  
  40.         string key = "10000";  
  41.         string val = "测试内容1";  
  42.           
  43.         rc = memcached_set(pstMCache, key.c_str(), key.size(), val.c_str(), val.size(), 0, 0);  
  44.         if (rc == MEMCACHED_SUCCESS)   
  45.         {   //set成功,进行get  
  46.                     unsigned int flags = 0;  
  47.                     char *mc_val = NULL;  
  48.                     size_t val_len = 0;  
  49.                     mc_val = memcached_get(pstMCache, key.c_str(), key.size(), &val_len, &flags, &rc);  
  50.                     if (rc == MEMCACHED_SUCCESS)   
  51.                     {  
  52.                         printf("buffer:%s|len:%Zd|cas:%ld\n", mc_val, val_len, pstMCache->result.item_cas);  
  53.                         if ( mc_val != NULL ){  
  54.                             free(mc_val);  
  55.                             mc_val = NULL;  
  56.                         }  
  57.                     }  
  58.                     else   
  59.                     {  
  60.                         if ( mc_val != NULL ){  
  61.                             free(mc_val);  
  62.                             mc_val = NULL;  
  63.                         }  
  64.                         string  err = memcached_strerror(pstMCache, rc);  
  65.                         printf("err:%s\n", err.c_str());  
  66.                         return -4;  
  67.                     }  
  68.   
  69.                       
  70.                        
  71.                     string val1 = "测试内容2";  
  72.                     //做了并发容错的memcached_cas  写操作,服务器维持了一个cas序列号,每次调用memcached_cas时,会判断之前get出来的cas是否发生了变化,变化了的话,说明已经被其他程序给修改了  
  73.                     rc= memcached_cas(pstMCache, key.c_str(), key.size(), val1.c_str(), val1.size(),0, 0, pstMCache->result.item_cas/*这个值是唯一序列*/);  
  74.                     if (rc == MEMCACHED_SUCCESS)   
  75.                     {  
  76.                         printf("rc:%d\n", rc);  
  77.                     }  
  78.                     else   
  79.                     {  
  80.                         string  err = memcached_strerror(pstMCache, rc);  
  81.                         printf("err:%s\n", err.c_str());  
  82.                     }  
  83.   
  84.                     mc_val = memcached_get(pstMCache, key.c_str(), key.size(), &val_len, &flags, &rc);  
  85.                     if (rc == MEMCACHED_SUCCESS)   
  86.                     {  
  87.                         printf("buffer:%s|len:%Zd\n", mc_val, val_len);  
  88.                     }  
  89.                     else   
  90.                     {  
  91.                         string  err = memcached_strerror(pstMCache, rc);  
  92.                         printf("err:%s\n", err.c_str());  
  93.                         return -4;  
  94.                     }  
  95.           
  96.         }   
  97.         else   
  98.         {  
  99.             string  err = memcached_strerror(pstMCache, rc);  
  100.             printf("err:%s\n", err.c_str());  
  101.             return -5;  
  102.         }  
  103.         return 0;  

来源:python脚本自动迁移

posted @ 2020-06-23 19:30  jiangcheng_15  阅读(201)  评论(0编辑  收藏  举报