Memcached.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _MEMCACHED_H
00025 #define _MEMCACHED_H
00026
00027 #include <string>
00028 #include <libmemcached/memcached.h>
00029
00030
00031
00033
00034 class Memcache {
00035
00036
00037 private:
00038
00040 memcached_st *_memc;
00041
00043 memcached_return_t _rc;
00044
00046 memcached_server_st *_servers;
00047
00049 time_t _timeout;
00050
00052 size_t _length;
00053
00055 bool _connected;
00056
00057
00058 public:
00059
00061
00064 Memcache( const std::string& servernames = "localhost", unsigned int timeout = 3600 ) {
00065
00066
00067 _timeout = timeout;
00068
00069
00070 _memc = memcached_create(NULL);
00071
00072
00073 _servers = memcached_servers_parse( servernames.c_str() );
00074
00075
00076
00077 _rc = memcached_behavior_set( _memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 1 );
00078 _rc = memcached_behavior_set( _memc, MEMCACHED_BEHAVIOR_NO_BLOCK, 1 );
00079 _rc = memcached_behavior_set( _memc, MEMCACHED_BEHAVIOR_TCP_NODELAY, 1 );
00080 _rc = memcached_behavior_set( _memc, MEMCACHED_BEHAVIOR_NOREPLY, 1 );
00081
00082
00083 _rc = memcached_server_push( _memc, _servers );
00084 if(_rc == MEMCACHED_SUCCESS ) _connected = true;
00085 else _connected = false;
00086
00087 if( memcached_server_count(_memc) > 0 ) _connected = true;
00088 else _connected = false;
00089 };
00090
00091
00093 ~Memcache() {
00094
00095 if( _servers ) memcached_server_free(_servers);
00096 if( _memc ) memcached_free(_memc);
00097 }
00098
00099
00101
00105 void store( const std::string& key, void* data, unsigned int length ){
00106
00107 if( !_connected ) return;
00108
00109 std::string k = "iipsrv::" + key;
00110 _rc = memcached_set( _memc, k.c_str(), k.length(),
00111 (char*) data, length,
00112 _timeout, 0 );
00113 }
00114
00115
00117
00120 char* retrieve( const std::string& key ){
00121
00122 if( !_connected ) return NULL;
00123
00124 uint32_t flags;
00125 std::string k = "iipsrv::" + key;
00126 return memcached_get( _memc, k.c_str(), k.length(), &_length, &flags, &_rc );
00127 }
00128
00129
00131 const char* error(){
00132 return memcached_strerror( _memc, _rc );
00133 };
00134
00135
00137 unsigned int length(){ return _length; };
00138
00139
00141 bool connected(){ return _connected; };
00142
00143
00144 };
00145
00146
00147
00148 #endif