设为首页 收藏本站
查看: 453|回复: 0

[经验分享] Linux下Redis C++操作的封装

[复制链接]

尚未签到

发表于 2015-7-21 10:49:01 | 显示全部楼层 |阅读模式
  安装和启动Redis服务...略!很粗糙的版本,待改进...
  Redis Client C++示例代码...略!



/**
* Time: 14-3-10
* File: RedisCache.h
* Author: wbhuang
* Description: none
*/
#ifndef __REDIS_CACHE_H__
#define __REDIS_CACHE_H__
#include
#include
#include "redisclient.h"
using namespace std;
using namespace boost;
class RedisMediator {
public:
static const int DEFAULT_EXPIRE_TIME = 0;
virtual string getKey() = 0;
virtual string getValue() = 0;
int getTime() { return 0; }
bool getIsSetDefaultValue() { return false; }
string getDefaultValue() { return "none"; }
};
class RedisCache {
private:
string host, port;
bool clusterMode;
shared_ptr client;
public:
RedisCache();
virtual ~RedisCache();
RedisCache(string host, string port);
string set(string key, string value);
string get(string key);
string del(string key);
string getAndSet(RedisMediator *redisMediator);
bool   exists(string key);
vector mGet(vector *keys);
vector mSet(vector *keys, vector *values);
vector mGetAndSet(vector *redisMediators);
string hashSet(string key, string field, string value);
string hashGet(string key, string field);
string hashDel(string key, string field);
string hashGetAndSet(string key, RedisMediator *redisMediator);
bool hashExists(string key, string field);
int hashLen(string key);
string sAdd(string key, string value);
string sPop(string key);
string sDel(string key);
string rPush(string key, string value);
string lPush(string key, string value);
int lLen(string key);
string lIndex(string key, int index);
string lSet(string key, int index, string value);
string lPop(string key);
string rPop(string key);
void flushAll();
void flushDb();
protected:
};
#endif /*__REDIS_CACHE_H__*/

  



/**
* Time: 14-3-1
* File: RedisCache.cpp
* Author: wbhuang
* Description: none
*/
#include "RedisCache.h"
#define VALUE_NULL "**nonexistent-key**"
RedisCache::RedisCache()
{
char *charHost= getenv("REDIS_HOST");
if(charHost) {
host = string(charHost);
} else {
host = string("localhost");
}
client = shared_ptr( new redis::client(host) );
}
RedisCache::RedisCache(string host, string port):host(host), port(port)
{
client = shared_ptr( new redis::client(this->host) );
}
RedisCache::~RedisCache()
{
}
string RedisCache::set(string key, string value)
{
if (key.empty())
return "";
client->set(key, value);
return value;
}
string RedisCache::get(string key)
{
string value;
if (key.empty())
return "";
if (exists(key))
value = client->get(key);
return value;
}
string RedisCache::del(string key)
{
string value;
value = get(key);
client->del(key);
return value;
}
string RedisCache::getAndSet(RedisMediator *redisMediator)
{
if (NULL == redisMediator)
return "";
string key, value;
key = redisMediator->getKey();
value = get(key);
if (value.empty())
{
value = redisMediator->getValue();
set(key, value);
int time = redisMediator->getTime();
if (0 != time)
client->expire(key, time);
}
return value;
}
bool RedisCache::exists(string key)
{
return client->exists(key);
}
vector RedisCache::mGet(vector *keys)
{
redis::client::string_vector vals;
client->mget(*keys, vals);
return vals;
}
vector RedisCache::mSet(vector *keys, vector *values)
{
for (int i = 0; i < keys->size(); i++)
{
client->set((*keys), (*values));
}
return *values;
}
vector RedisCache::mGetAndSet(vector *redisMediators)
{
string key, value;
vector values;
for (int i = 0; i < redisMediators->size(); i++)
{
key = (*redisMediators)->getKey();
value = get(key);
if (value.empty())
{
value = (*redisMediators)->getKey();
set(key, value);
}
values.push_back(value);
}
return values;
}
string RedisCache::hashSet(string key, string field, string value)
{
if(key.empty() || field.empty())
return "";
client->hset(key, field, value);
return value;
}
string RedisCache::hashGet(string key, string field)
{
if (key.empty() || field.empty())
return "";
string value;
if (hashExists(key, field))
value = client->hget(key, field);
return value;
}
string RedisCache::hashDel(string key, string field)
{
string value;
value = hashGet(key, field);
client->hdel(key, field);
return value;
}
string RedisCache::hashGetAndSet(string key, RedisMediator *redisMediator)
{
if (key.empty() || NULL == redisMediator)
return "";
string field, value;
field = redisMediator->getKey();
value = hashGet(key, field);
if (value.empty())
{
value = redisMediator->getValue();
hashSet(key, field, value);
}
return value;
}
bool RedisCache::hashExists(string key, string field)
{
return client->hexists(key, field);
}
int RedisCache::hashLen(string key)
{
return client->hlen(key);
}
string RedisCache::sAdd(string key, string value)
{
if (key.empty() || value.empty())
return "";
client->sadd(key, value);
return value;
}
string RedisCache::sPop(string key)
{
string value;
value = client->spop(key);
if (VALUE_NULL == value)
value = "";
return value;
}
string RedisCache::sDel(string key)
{
if (key.empty())
return "";
return sPop(key);
}
string RedisCache::rPush(string key, string value)
{
if (key.empty())
return "";
client->rpush(key, value);
return value;
}
string RedisCache::lPush(string key, string value)
{
if (key.empty())
return "";
client->lpush(key, value);
return value;
}
int RedisCache::lLen(string key)
{
if (key.empty())
return 0;
return client->llen(key);
}
string RedisCache::lIndex(string key, int index)
{
if (key.empty() || index < 0 || index >= lLen(key))
return "";
string value = client->lindex(key, index);
if (VALUE_NULL == value)
value ="";
return value;
}
string RedisCache::lSet(string key, int index, string value)
{
if (key.empty() || index < 0 || index >= lLen(key))
return "";
client->lset(key, index, value);
return value;
}
string RedisCache::lPop(string key)
{
if (key.empty())
return "";
string value = client->lpop(key);
if (VALUE_NULL == value)
value = "";
return value;
}
string RedisCache::rPop(string key)
{
if (key.empty())
return "";
string value = client->rpop(key);
if (VALUE_NULL == value)
value = "";
return value;
}
void RedisCache::flushAll()
{
client->flushall();
}
void RedisCache::flushDb()
{
client->flushdb();
}

  



#include "RedisCache.h"
#include  
int main()
{
RedisCache* cache = new RedisCache();
cache->set("foo", "wbhuang");
string value = cache->get("foo");
cout

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-88997-1-1.html 上篇帖子: Redis: under the hood---转载 下篇帖子: redis保存dataset
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表