• 封装 libmemcached


    对 libmemcached进行二次封装,主要是利用其存储 vector<T>。

    下面有待改善和完善,先记着,下次更新。

     1 #include <iostream>
     2 #include <string>
     3 #include <libmemcached/memcached.h>
     4 #include <vector>
     5 
     6 using namespace std;
     7 
     8 class MemcachedHelper
     9 {
    10     time_t expiration;
    11     uint32_t  flags;
    12     memcached_st *memc;
    13       memcached_return rc;
    14       memcached_server_st *server;
    15   public:
    16     MemcachedHelper()
    17     {
    18         memc = memcached_create(NULL);
    19         server = memcached_server_list_append(NULL,"10.10.10.233",11211,&rc);
    20         rc=memcached_server_push(memc,server);
    21         memcached_server_list_free(server);
    22         expiration = 100;
    23     }
    24     ~MemcachedHelper()
    25     {
    26         memcached_free(memc);
    27     }
    28     public:
    29     template<class T> void set(string in_key,vector<T> in_vect)
    30     {
    31         char* valueChar = new char[sizeof(T)* in_vect.size()];
    32         memcpy(valueChar, &in_vect[0], sizeof(T)* in_vect.size());
    33         size_t value_length = sizeof(T)* in_vect.size();    
    34         rc=memcached_set(memc,in_key.c_str(),in_key.length(),valueChar,value_length,expiration,flags);
    35         if(rc==MEMCACHED_SUCCESS)
    36         {
    37             cout<<"Set: "<<in_key<<" OK!"<<endl;
    38         }
    39         delete valueChar;
    40     }
    41     public:    
    42     template<class T> void get(string in_key,vector<T>& in_vect)
    43     {    
    44         size_t value_length = 0;
    45         size_t key_length = in_key.length();
    46         char* result = memcached_get(memc,in_key.c_str(), key_length,&value_length,&flags,&rc);
    47         if(rc == MEMCACHED_SUCCESS)
    48         {
    49             in_vect.reserve(value_length / (sizeof(T)));
    50             memcpy(&in_vect[0], result, value_length);
    51             cout<<"Get: "<<in_key<<" OK!"<<endl;
    52         }
    53     }    
    54 };
    55 
    56 
    57 class Product
    58 {
    59 public:
    60     Product(){}
    61     Product(int in_id, int in_price)
    62     {
    63         id = in_id;
    64         price = in_price;
    65     }
    66 
    67 public:
    68     int id;
    69     int price;
    70 public:
    71     int getid(){return id;}
    72     int getprice(){return price;}
    73 };
    74 
    75 
    76 int main()
    77 {
    78     Product product1(1,1);
    79     Product product2(2,2);
    80     Product product3(30,30);
    81     vector<Product> product;
    82     product.push_back(product1);
    83     product.push_back(product2);
    84     product.push_back(product3);
    85 
    86     MemcachedHelper mem;
    87 
    88     mem.set("oo",product);
    89     
    90     vector<Product> result;
    91     mem.get("oo",result);
    92     cout<<result[2].id<<endl;
    93 }

    改进版(仍有待改进):

    View Code
     1 #include <iostream>
     2 #include <string>
     3 #include <libmemcached/memcached.h>
     4 #include <vector>
     5 
     6 #pragma once
     7 
     8 using namespace std;
     9 
    10 
    11 class MemcachedHelper
    12 {
    13     time_t expiration;
    14     uint32_t  flags;
    15     memcached_st *memc;
    16       memcached_return rc;
    17       memcached_server_st *server;
    18   public:
    19     MemcachedHelper()
    20     {
    21         memc = memcached_create(NULL);
    22         server = memcached_server_list_append(NULL,"10.10.10.233",11211,&rc);
    23         rc=memcached_server_push(memc,server);
    24         memcached_server_list_free(server);
    25         expiration = 1000000;
    26     }
    27     ~MemcachedHelper()
    28     {
    29         memcached_free(memc);
    30     }
    31     
    32     public:
    33     int set(string in_key,string in_value)
    34     {
    35         rc=memcached_set(memc,in_key.c_str(),in_key.length(),in_value.c_str(),in_value.length(),expiration,flags);
    36         if(rc==MEMCACHED_SUCCESS)
    37             return 1;
    38         else
    39             return 0;
    40     }
    41     
    42     public:
    43     template<class T> int set(string in_key,vector<T> &in_vect)
    44     {
    45         char* valueChar = new char[sizeof(T)* in_vect.size()];
    46         memcpy(valueChar, &in_vect[0], sizeof(T)* in_vect.size());
    47         size_t value_length = sizeof(T)* in_vect.size();    
    48         rc=memcached_set(memc,in_key.c_str(),in_key.length(),valueChar,value_length,expiration,flags);
    49         if(rc==MEMCACHED_SUCCESS)
    50             return 1;
    51         else
    52             return 0;
    53         delete valueChar;
    54     }
    55     
    56     public:    
    57     int get(string in_key,string &out_value)
    58     {    
    59         size_t value_length = 0;
    60         char* result = memcached_get(memc,in_key.c_str(), in_key.length(),&value_length,&flags,&rc);
    61         if(rc == MEMCACHED_SUCCESS)
    62         {
    63             out_value = result;
    64             return 1;
    65         }
    66         else
    67         {
    68             return 0;
    69         }
    70     }    
    71     
    72     public:    
    73     template<class T> int get(string in_key,vector<T>& in_vect)
    74     {    
    75         size_t value_length = 0;
    76         size_t key_length = in_key.length();
    77         char* result = memcached_get(memc,in_key.c_str(), key_length,&value_length,&flags,&rc);
    78         if(rc == MEMCACHED_SUCCESS)
    79         {
    80             in_vect.reserve(value_length / (sizeof(T)));
    81             memcpy(&in_vect[0], result, value_length);
    82             in_vect.assign(in_vect.begin(),in_vect.begin()+value_length/(sizeof(T)));
    83             //cout<<"Get: "<<in_key<<" OK!"<<endl;
    84             //size = value_length/sizeof(T);
    85             return 1;
    86         }
    87         else
    88         {
    89             return 0;
    90         }
    91     }    
    92 };
  • 相关阅读:
    traceroute tracert 路由器地址 清单 192.168.2.1 网关路由器地址
    /usr/local/nginx/sbin/nginx -s reload 失败原因pid 进程记录和当前不符
    Nginx应用-Location路由反向代理及重写策略 请求转发-URL匹配规则 NGINX Reverse Proxy
    (转载)你好,C++(1)C++是什么?C++的“前世今生”
    (原创)cocos2d-x 3.0 示例代码分析5:testBasic
    (原创)cocos2d-x 3.0 示例代码分析4:VisibleRect
    (原创)cocos2d-x 3.0 示例代码分析3:BaseTest
    (摘要)100个伟大的商业理念:理念35:引爆流行
    (摘要)100个伟大的商业理念:理念34:企业社会责任
    (摘要)100个伟大的商业理念:理念32:重新改造
  • 原文地址:https://www.cnblogs.com/tianyajuanke/p/2471859.html
Copyright © 2020-2023  润新知