{
public:
- Memcache() :
- servers_list(),
- memc(),
- result()
+ Memcache()
{
- memcached_create(&memc);
+ memc= memcached("", 0);
}
- Memcache(const std::string &in_servers_list)
- :
- servers_list(in_servers_list),
- memc(),
- result()
+ Memcache(const std::string &config)
{
- memcached_create(&memc);
- init();
+ memc= memcached(config.c_str(), config.size());
}
- Memcache(const std::string &hostname,
- in_port_t port)
- :
- servers_list(),
- memc(),
- result()
+ Memcache(const std::string &hostname, in_port_t port)
{
- memcached_create(&memc);
-
- servers_list.append(hostname);
- servers_list.append(":");
- std::ostringstream strsmt;
- strsmt << port;
- servers_list.append(strsmt.str());
-
- init();
+ memc= memcached("", 0);
+ if (memc)
+ memcached_server_add(memc, hostname.c_str(), port);
}
Memcache(memcached_st *clone)
- :
- servers_list(),
- memc(),
- result()
{
- memcached_clone(&memc, clone);
+ memc= memcached_clone(NULL, clone);
}
Memcache(const Memcache &rhs)
- :
- servers_list(rhs.servers_list),
- memc(),
- result()
{
- memcached_clone(&memc, const_cast<memcached_st *>(&rhs.getImpl()));
- init();
+ memc= memcached_clone(NULL, rhs.getImpl());
}
Memcache &operator=(const Memcache &rhs)
{
if (this != &rhs)
{
- memcached_clone(&memc, const_cast<memcached_st *>(&rhs.getImpl()));
- init();
+ memcached_free(memc);
+ memc= memcached_clone(NULL, rhs.getImpl());
}
return *this;
~Memcache()
{
- memcached_free(&memc);
- }
-
- void init()
- {
- memcached_server_st *servers;
- servers= memcached_servers_parse(servers_list.c_str());
- memcached_server_push(&memc, servers);
- memcached_server_free(servers);
- }
-
- /**
- * Get the internal memcached_st *
- */
- memcached_st &getImpl()
- {
- return memc;
+ memcached_free(memc);
}
/**
* Get the internal memcached_st *
*/
- const memcached_st &getImpl() const
+ const memcached_st *getImpl() const
{
return memc;
}
bool setBehavior(memcached_behavior_t flag, uint64_t data)
{
- memcached_return_t rc;
- rc= memcached_behavior_set(&memc, flag, data);
- return (rc == MEMCACHED_SUCCESS);
- }
-
- uint64_t getBehavior(memcached_behavior_t flag) {
- return memcached_behavior_get(&memc, flag);
+ return (memcached_success(memcached_behavior_set(memc, flag, data)));
}
- /**
- * Return the string which contains the list of memcached servers being
- * used.
- *
- * @return a std::string containing the list of memcached servers
- */
- const std::string getServersList() const
+ uint64_t getBehavior(memcached_behavior_t flag)
{
- return servers_list;
+ return memcached_behavior_get(memc, flag);
}
/**
- * Set the list of memcached servers to use.
+ * Configure the memcache object
*
- * @param[in] in_servers_list list of servers
+ * @param[in] in_config configuration
* @return true on success; false otherwise
*/
- bool setServers(const std::string &in_servers_list)
+ bool configure(const std::string &configuration)
{
- servers_list.assign(in_servers_list);
- init();
-
- return (memcached_server_count(&memc));
+ return (memcached_success(memcached_parse_configuration(memc, configuration.c_str(), configuration.size())));
}
/**
{
memcached_return_t rc;
- rc= memcached_server_add(&memc, server_name.c_str(), port);
+ rc= memcached_server_add(memc, server_name.c_str(), port);
return (rc == MEMCACHED_SUCCESS);
}
size_t key_length= 0;
memcached_return_t rc;
uint32_t flags= 0;
- char *value= memcached_fetch(&memc, ret_key, &key_length,
+ char *value= memcached_fetch(memc, ret_key, &key_length,
&value_length, &flags, &rc);
if (value && ret_val.empty())
{
memcached_return_t rc;
size_t value_length= 0;
- char *value= memcached_get(&memc, key.c_str(), key.length(),
+ char *value= memcached_get(memc, key.c_str(), key.length(),
&value_length, &flags, &rc);
if (value != NULL && ret_val.empty())
{
memcached_return_t rc;
size_t value_length= 0;
- char *value= memcached_get_by_key(&memc,
+ char *value= memcached_get_by_key(memc,
master_key.c_str(), master_key.length(),
key.c_str(), key.length(),
&value_length, &flags, &rc);
*/
if (! real_keys.empty())
{
- memcached_return_t rc= memcached_mget(&memc, &real_keys[0], &key_len[0],
- real_keys.size());
+ memcached_return_t rc= memcached_mget(memc, &real_keys[0], &key_len[0], real_keys.size());
return (rc == MEMCACHED_SUCCESS);
}
time_t expiration,
uint32_t flags)
{
- memcached_return_t rc= memcached_set(&memc,
- key.c_str(), key.length(),
- &value[0], value.size(),
- expiration, flags);
+ memcached_return_t rc= memcached_set(memc,
+ key.c_str(), key.length(),
+ &value[0], value.size(),
+ expiration, flags);
return (rc == MEMCACHED_SUCCESS || rc == MEMCACHED_BUFFERED);
}
time_t expiration,
uint32_t flags)
{
- memcached_return_t rc= memcached_set_by_key(&memc, master_key.c_str(),
- master_key.length(),
- key.c_str(), key.length(),
- &value[0], value.size(),
- expiration,
- flags);
+ memcached_return_t rc= memcached_set_by_key(memc, master_key.c_str(),
+ master_key.length(),
+ key.c_str(), key.length(),
+ &value[0], value.size(),
+ expiration,
+ flags);
return (rc == MEMCACHED_SUCCESS);
}
*/
bool increment(const std::string &key, uint32_t offset, uint64_t *value)
{
- memcached_return_t rc= memcached_increment(&memc, key.c_str(), key.length(),
- offset, value);
+ memcached_return_t rc= memcached_increment(memc, key.c_str(), key.length(),
+ offset, value);
return (rc == MEMCACHED_SUCCESS);
}
*/
bool decrement(const std::string &key, uint32_t offset, uint64_t *value)
{
- memcached_return_t rc= memcached_decrement(&memc, key.c_str(),
- key.length(),
- offset, value);
+ memcached_return_t rc= memcached_decrement(memc, key.c_str(),
+ key.length(),
+ offset, value);
return (rc == MEMCACHED_SUCCESS);
}
*/
bool add(const std::string &key, const std::vector<char> &value)
{
- memcached_return_t rc= memcached_add(&memc, key.c_str(), key.length(),
- &value[0], value.size(), 0, 0);
+ memcached_return_t rc= memcached_add(memc, key.c_str(), key.length(),
+ &value[0], value.size(), 0, 0);
return (rc == MEMCACHED_SUCCESS);
}
const std::string &key,
const std::vector<char> &value)
{
- memcached_return_t rc= memcached_add_by_key(&memc,
- master_key.c_str(),
- master_key.length(),
- key.c_str(),
- key.length(),
- &value[0],
- value.size(),
- 0, 0);
+ memcached_return_t rc= memcached_add_by_key(memc,
+ master_key.c_str(),
+ master_key.length(),
+ key.c_str(),
+ key.length(),
+ &value[0],
+ value.size(),
+ 0, 0);
return (rc == MEMCACHED_SUCCESS);
}
*/
bool replace(const std::string &key, const std::vector<char> &value)
{
- memcached_return_t rc= memcached_replace(&memc, key.c_str(), key.length(),
- &value[0], value.size(),
- 0, 0);
+ memcached_return_t rc= memcached_replace(memc, key.c_str(), key.length(),
+ &value[0], value.size(),
+ 0, 0);
return (rc == MEMCACHED_SUCCESS);
}
const std::string &key,
const std::vector<char> &value)
{
- memcached_return_t rc= memcached_replace_by_key(&memc,
- master_key.c_str(),
- master_key.length(),
- key.c_str(),
- key.length(),
- &value[0],
- value.size(),
- 0, 0);
+ memcached_return_t rc= memcached_replace_by_key(memc,
+ master_key.c_str(),
+ master_key.length(),
+ key.c_str(),
+ key.length(),
+ &value[0],
+ value.size(),
+ 0, 0);
return (rc == MEMCACHED_SUCCESS);
}
*/
bool prepend(const std::string &key, const std::vector<char> &value)
{
- memcached_return_t rc= memcached_prepend(&memc, key.c_str(), key.length(),
- &value[0], value.size(), 0, 0);
+ memcached_return_t rc= memcached_prepend(memc, key.c_str(), key.length(),
+ &value[0], value.size(), 0, 0);
return (rc == MEMCACHED_SUCCESS);
}
const std::string &key,
const std::vector<char> &value)
{
- memcached_return_t rc= memcached_prepend_by_key(&memc,
- master_key.c_str(),
- master_key.length(),
- key.c_str(),
- key.length(),
- &value[0],
- value.size(),
- 0,
- 0);
+ memcached_return_t rc= memcached_prepend_by_key(memc,
+ master_key.c_str(),
+ master_key.length(),
+ key.c_str(),
+ key.length(),
+ &value[0],
+ value.size(),
+ 0,
+ 0);
return (rc == MEMCACHED_SUCCESS);
}
*/
bool append(const std::string &key, const std::vector<char> &value)
{
- memcached_return_t rc= memcached_append(&memc,
+ memcached_return_t rc= memcached_append(memc,
key.c_str(),
key.length(),
&value[0],
const std::string &key,
const std::vector<char> &value)
{
- memcached_return_t rc= memcached_append_by_key(&memc,
+ memcached_return_t rc= memcached_append_by_key(memc,
master_key.c_str(),
master_key.length(),
key.c_str(),
const std::vector<char> &value,
uint64_t cas_arg)
{
- memcached_return_t rc= memcached_cas(&memc, key.c_str(), key.length(),
- &value[0], value.size(),
- 0, 0, cas_arg);
+ memcached_return_t rc= memcached_cas(memc, key.c_str(), key.length(),
+ &value[0], value.size(),
+ 0, 0, cas_arg);
return (rc == MEMCACHED_SUCCESS);
}
const std::vector<char> &value,
uint64_t cas_arg)
{
- memcached_return_t rc= memcached_cas_by_key(&memc,
- master_key.c_str(),
- master_key.length(),
- key.c_str(),
- key.length(),
- &value[0],
- value.size(),
- 0, 0, cas_arg);
+ memcached_return_t rc= memcached_cas_by_key(memc,
+ master_key.c_str(),
+ master_key.length(),
+ key.c_str(),
+ key.length(),
+ &value[0],
+ value.size(),
+ 0, 0, cas_arg);
return (rc == MEMCACHED_SUCCESS);
}
*/
bool remove(const std::string &key)
{
- memcached_return_t rc= memcached_delete(&memc, key.c_str(), key.length(), 0);
+ memcached_return_t rc= memcached_delete(memc, key.c_str(), key.length(), 0);
return (rc == MEMCACHED_SUCCESS);
}
*/
bool remove(const std::string &key, time_t expiration)
{
- memcached_return_t rc= memcached_delete(&memc,
- key.c_str(),
- key.length(),
- expiration);
+ memcached_return_t rc= memcached_delete(memc,
+ key.c_str(),
+ key.length(),
+ expiration);
return (rc == MEMCACHED_SUCCESS);
}
bool removeByKey(const std::string &master_key,
const std::string &key)
{
- memcached_return_t rc= memcached_delete_by_key(&memc,
- master_key.c_str(),
- master_key.length(),
- key.c_str(),
- key.length(),
- 0);
+ memcached_return_t rc= memcached_delete_by_key(memc,
+ master_key.c_str(),
+ master_key.length(),
+ key.c_str(),
+ key.length(),
+ 0);
return (rc == MEMCACHED_SUCCESS);
}
const std::string &key,
time_t expiration)
{
- memcached_return_t rc= memcached_delete_by_key(&memc,
- master_key.c_str(),
- master_key.length(),
- key.c_str(),
- key.length(),
- expiration);
+ memcached_return_t rc= memcached_delete_by_key(memc,
+ master_key.c_str(),
+ master_key.length(),
+ key.c_str(),
+ key.length(),
+ expiration);
return (rc == MEMCACHED_SUCCESS);
}
*/
bool flush(time_t expiration)
{
- memcached_return_t rc= memcached_flush(&memc, expiration);
+ memcached_return_t rc= memcached_flush(memc, expiration);
return (rc == MEMCACHED_SUCCESS);
}
&stats_map)
{
memcached_return_t rc;
- memcached_stat_st *stats= memcached_stat(&memc, NULL, &rc);
+ memcached_stat_st *stats= memcached_stat(memc, NULL, &rc);
if (rc != MEMCACHED_SUCCESS &&
rc != MEMCACHED_SOME_ERRORS)
return false;
}
- uint32_t server_count= memcached_server_count(&memc);
+ uint32_t server_count= memcached_server_count(memc);
/*
* For each memcached server, construct a std::map for its stats and add
for (uint32_t x= 0; x < server_count; x++)
{
memcached_server_instance_st instance=
- memcached_server_instance_by_position(&memc, x);
+ memcached_server_instance_by_position(memc, x);
std::ostringstream strstm;
std::string server_name(memcached_server_name(instance));
server_name.append(":");
char **list= NULL;
char **ptr= NULL;
- list= memcached_stat_get_keys(&memc, &stats[x], &rc);
+ list= memcached_stat_get_keys(memc, &stats[x], &rc);
for (ptr= list; *ptr; ptr++)
{
- char *value= memcached_stat_get_value(&memc, &stats[x], *ptr, &rc);
+ char *value= memcached_stat_get_value(memc, &stats[x], *ptr, &rc);
server_stats[*ptr]= value;
free(value);
}
free(list);
}
- memcached_stat_free(&memc, stats);
+ memcached_stat_free(memc, stats);
return true;
}
private:
-
- std::string servers_list;
- memcached_st memc;
- memcached_result_st result;
+ memcached_st *memc;
};
}