安装和启动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++操作的封装的更多相关文章

  1. Linux下Redis服务器安装配置

    说明:操作系统:CentOS1.安装编译工具yum install wget  make gcc gcc-c++ zlib-devel openssl openssl-devel pcre-devel ...

  2. linux下Redis与phpredis扩展安装

    ++++++++++++++++++++++++++++++++++++++++++++++linux下Redis与phpredis扩展安装++++++++++++++++++++++++++++++ ...

  3. windows下和linux下 Redis 安装

    Redis 是一个高性能的key-value数据库, 使用内存作为主存储,数据访问速度非常快,当然它也提供了两种机制支持数据持久化存储.比较遗憾的是,Redis项目不直接支持Windows,Windo ...

  4. 莫小安 Linux下Redis的安装与配置

    转载自--Linux下Redis的安装与配置 redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcached类似,但很大程度补偿了 memcached的不足,它 ...

  5. linux下的shell操作mysql

    (1)MySQL的启动 重启了一次服务器后,使用> mysql -u root -p登陆是出现下面的错误: ERROR 2002 (HY000): Can't connect to local ...

  6. linux下redis的安装及配置启动

    linux下redis的安装及配置启动 标签: redisnosql 2014-10-24 14:04 19732人阅读 评论(0) 收藏 举报  分类: 数据与性能(41)  wget http:/ ...

  7. linux下的文本操作之 文本查找——grep

    摘要:你有没有这样的应用场景:调试一个程序,出现debug的提示信息,现在你需要定位是哪个文件包含了这个debug信息,也就是说,你需要在一个目录下的多个文件(可能包含子目录)中查找某个字符串的位置: ...

  8. linux下通过sysfs操作GPIO

    linux下通过sysfs操作GPIO 在嵌入式设备中对GPIO的操作是最基本的操作.一般的做法是写一个单独驱动程序,网上大多数的例子都是这样的.其实linux下面有一个通用的GPIO操作接口,那就是 ...

  9. linux下redis服务器安装使用 安装php的redis扩展 安装laravel下的redis

    linux下redis服务器安装使用 学习源头: https://blog.csdn.net/itmanba/article/details/77335012 安装完毕试运行redis的时候,可能会出 ...

随机推荐

  1. Codeforces Gym101502 A.Very Hard Question

    2017 JUST Programming Contest 3.0 昨天的训练赛,打的好难过,因为被暴打了,写了8题,他们有的写了9题,差了一道dp,博客上写7道题的题解. 因为有一道是套板子过的,并 ...

  2. java反射原理运用

    1.首先用Java反射机制的要做到的一个目的:我们都知道通过得到一个对象中的指定方法或者属性等,基于这个原理我们来做一个 通用的功能,让客户端可以通过传入的对象和一个标识去调用这个对象里自己想要的方法 ...

  3. The Process class relies on proc_open, which is not available on your PHP installation

    [Symfony\Component\Process\Exception\RuntimeException] The Process class relies on proc_open, which ...

  4. 邁向IT專家成功之路的三十則鐵律 鐵律五:IT人穩定發展之道-去除惡習

    在我們努力邁向IT專家成功之路的過程當中,實際上會遭遇到許多障礙來影響我們前進,然而在這諸多障礙之中,最難克服的並非是旁人對我們所造成的影響,而是無形之間自己對自己所造的阻礙,如果沒有隨時隨地加以自反 ...

  5. sublime快捷键设置

    1.sublime自带的快捷键设置:这里的super在mac下是指command键 右边的内容表示用户自定义的快捷键:比如如图所示command+d表示复制光标所在行 常用操作:复制粘贴什么的太常用的 ...

  6. Swagger学习和实践

    Swagger学习和实践 学习了:https://www.cnblogs.com/zxtceq/p/5530396.html swagger 英 [ˈswægə(r)] 美 [ˈswæɡɚ] vi.昂 ...

  7. 转:在CentOS下编译安装GCC

    转:https://teddysun.com/432.html 在CentOS下编译安装GCC 技术  秋水逸冰  发布于: 2015-09-02  更新于: 2015-09-02  6519 次围观 ...

  8. JavaWeb页面添加隐藏版权信息

    JavaWeb页面添加隐藏版权信息. 首先,我推荐一个值得玩味的版权站点,有兴趣的朋友能够去看上一看.Nazo Level 1,这个demo中我能发掘到有5个步骤,你看你能发现几层? 接下来.我来介绍 ...

  9. 设置安卓开机动画、开机logo

    我们要修改的是system>media文件夹下的bootanimation.zip(手机开机动画)这个文件 先来讲讲这个文件结构:该zip解压后得到两个文件, 第一个目录存放了开机时播放的图片( ...

  10. XML(四)dom4j解析XML

    使用dom4j须要导入jar包 jar包下载地址:http://pan.baidu.com/s/1o65jWRw 将dom4j-1.6.1.jar包导入Eclipse book2.xml <?x ...