Linux下Redis C++操作的封装
安装和启动Redis服务...略!很粗糙的版本,待改进...
Redis Client C++示例代码...略!
/** * Time: 14-3-10 * File: RedisCache.h * Author: wbhuang * Description: none */ #ifndef __REDIS_CACHE_H__ #define __REDIS_CACHE_H__ #include <string> #include <boost/date_time.hpp> #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<redis::client> 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<string> mGet(vector<string> *keys); vector<string> mSet(vector<string> *keys, vector<string> *values); vector<string> mGetAndSet(vector<RedisMediator*> *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<redis::client>( new redis::client(host) ); } RedisCache::RedisCache(string host, string port):host(host), port(port) { client = shared_ptr<redis::client>( 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<string> RedisCache::mGet(vector<string> *keys) { redis::client::string_vector vals; client->mget(*keys, vals); return vals; } vector<string> RedisCache::mSet(vector<string> *keys, vector<string> *values) { for (int i = 0; i < keys->size(); i++) { client->set((*keys)[i], (*values)[i]); } return *values; } vector<string> RedisCache::mGetAndSet(vector<RedisMediator*> *redisMediators) { string key, value; vector<string> values; for (int i = 0; i < redisMediators->size(); i++) { key = (*redisMediators)[i]->getKey(); value = get(key); if (value.empty()) { value = (*redisMediators)[i]->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 <iostream> int main() { RedisCache* cache = new RedisCache(); cache->set("foo", "wbhuang"); string value = cache->get("foo"); cout<<"after set foo:"<<value<<endl; cache->del("foo"); value = cache->get("foo"); cout<<"after del foo:"<<cache->get("foo")<<endl; vector<string> vecKey, vecValue; vecKey.push_back("foo1"); vecValue.push_back("val1"); vecKey.push_back("foo2"); vecValue.push_back("val2"); cache->mSet(&vecKey, &vecValue); cout<<"after mset foo2:"<<cache->get("foo2")<<endl; vector<string> vecRet = cache->mGet(&vecKey); cout<<"after mget foo1:"<<vecRet[0]<<endl; string hKey = "hfoo"; string hField = "hfield"; cache->hashSet(hKey, hField, "wbhuang"); cout<<"after hset len:"<<cache->hashLen(hKey)<<endl; string hValue = cache->hashGet(hKey, hField); cache->hashDel(hKey, hField); //cache->del(hKey); cout<<"after hdel len:"<<cache->hashLen(hKey) <<",value"<<cache->hashGet(hKey, hField)<<endl; string sKey = "sKey"; string sValue = "sValue"; cache->sAdd(sKey, sValue); cout<<"after sAdd value:"<<cache->sPop(sKey)<<endl; cache->sDel(sKey); cout<<"after sDel value:"<<cache->sPop(sKey)<<endl; string rKey = "rfoo"; string rValue = "rValue", lValue = "lValue"; cache->rPush(rKey, rValue); cout<<"test rPush end"<<endl; cache->lPush(rKey, lValue); cout<<"test lPush end"<<endl; string rRet; rRet = cache->lIndex(rKey, 1); cout<<"test lIndex end rRet:"<<rRet<<endl; int llen = cache->lLen(rKey); cout<<"test lLen end len:"<<llen<<endl; cout<<"test lIndex end 1:"<<rRet<<endl; rRet = cache->lPop(rKey); cout<<"after lPop ret:"<<rRet<<endl; cache->lSet(rKey, 0, "wbh"); rRet = cache->rPop(rKey); cout<<"after lset rPop ret:"<<rRet<<endl; rRet = cache->rPop(rKey); cout<<"empty stack len:"<<cache->lLen(rKey)<<",ret:"<<cache->rPop(rKey)<<endl; cout<<"empty statck 0:"<<cache->lIndex(rKey, 0)<<endl; cache->flushDb(); delete cache; return 0; }
Linux下Redis C++操作的封装的更多相关文章
- Linux下Redis服务器安装配置
说明:操作系统:CentOS1.安装编译工具yum install wget make gcc gcc-c++ zlib-devel openssl openssl-devel pcre-devel ...
- linux下Redis与phpredis扩展安装
++++++++++++++++++++++++++++++++++++++++++++++linux下Redis与phpredis扩展安装++++++++++++++++++++++++++++++ ...
- windows下和linux下 Redis 安装
Redis 是一个高性能的key-value数据库, 使用内存作为主存储,数据访问速度非常快,当然它也提供了两种机制支持数据持久化存储.比较遗憾的是,Redis项目不直接支持Windows,Windo ...
- 莫小安 Linux下Redis的安装与配置
转载自--Linux下Redis的安装与配置 redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcached类似,但很大程度补偿了 memcached的不足,它 ...
- linux下的shell操作mysql
(1)MySQL的启动 重启了一次服务器后,使用> mysql -u root -p登陆是出现下面的错误: ERROR 2002 (HY000): Can't connect to local ...
- linux下redis的安装及配置启动
linux下redis的安装及配置启动 标签: redisnosql 2014-10-24 14:04 19732人阅读 评论(0) 收藏 举报 分类: 数据与性能(41) wget http:/ ...
- linux下的文本操作之 文本查找——grep
摘要:你有没有这样的应用场景:调试一个程序,出现debug的提示信息,现在你需要定位是哪个文件包含了这个debug信息,也就是说,你需要在一个目录下的多个文件(可能包含子目录)中查找某个字符串的位置: ...
- linux下通过sysfs操作GPIO
linux下通过sysfs操作GPIO 在嵌入式设备中对GPIO的操作是最基本的操作.一般的做法是写一个单独驱动程序,网上大多数的例子都是这样的.其实linux下面有一个通用的GPIO操作接口,那就是 ...
- linux下redis服务器安装使用 安装php的redis扩展 安装laravel下的redis
linux下redis服务器安装使用 学习源头: https://blog.csdn.net/itmanba/article/details/77335012 安装完毕试运行redis的时候,可能会出 ...
随机推荐
- C++: 多态 虚函数
一.多态: 1.多态是什么:具有不同功能的函数可以用同一个函数名 2.静态多态:程序编译时决定,通过函数重载实现. 3.动态多态:程序运行时决定,通过虚函数实现. 二.虚函数: 1.引入目的:可以通过 ...
- Eval is evil ('Eval是魔鬼') --- eval()函数
Eval is evil ('Eval是魔鬼') eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码.语法:eval(string): eval的使用场合是什么呢?有时候我 ...
- ios高效开发--blocks相关
1.替换delegate 如果我们有2个viewController,a和b,当我们从a界面push到b后,在b上面触发了一些事件,这些时间又会影响到a界面上的内容. ...
- 深度排序与alpha混合 【转】
翻译:李现民 最后修改:2012-07-03 原文:Depth sorting alpha blended objects 先说个题外话,本来我想回答在 Creators Club论坛上的一个常见 ...
- editplus重新载入文档
editplus重新载入文档 :document->reload
- x264 编码数配置
记录项目中用到一组x264快速编码参数配置,具体如下: param->i_frame_reference = 1; param->i_scenecut_threshold = 0; par ...
- Windows 系统 vs2012 MinGW 编译ffmpeg 静态库
Windows系统下 vs2012编译ffmpeg 动态库 前面已经有文章讲述,本文将讲述如果编译生成ffmpeg静态库以方便 在vs2012下调用. 准备工作:安装MinGW环境,修改ffmpeg配 ...
- ARP协议(1)什么是ARP协议
这是最近在看<TCP/IP具体解释>系列书总结出来的,之后会陆续把其它协议部分分享出来. 我尽量以简单易读.易懂的方式呈现出来,可是,因为文笔和水平有限.有些地方或许存在描写叙述上的不足或 ...
- Django中的模板和分页
模板 在Templates中添加母版: - 母版...html 母版(master.html)中可变化的地方加入: {%block content%}{%endblock%} 在子版 (usermg. ...
- kubernetes对象之Job
系列目录 job是什么 对于ReplicaSet.ReplicationController等类型的控制器而言,它希望pod保持预期数目.持久运行下去,除非用户明确删除,否则这些对象一直存在,它们针对 ...