redis 配置和使用(C++)
一、Redis简介:
Redis为非关系型数据库,Redis是一个Key-Value存储系统。它支持存储的value类型有:string(字符串),list(链表), set(无序集合),zset(sorted set有序集合)和hash,Redis支持各种不同方式的排序。数据都是缓存在内存中的,它也可以周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并实现了master-slave(主从)同步。
二、Redis安装和使用:
Redis下载地址,我下载的为最新版本:
wget http://download.redis.io/releases/redis-...tar.gz
解压安装:
$ tar xzf redis-...tar.gz
$ cd redis-..
$ make
make完后 redis-3.2.8目录下会出现redis-server和redis-cli
下面在src目录下启动redis服务.
$./redis-server
$ ./redis-server redis.conf
redis.conf是一个默认的配置文件。我们可以根据需要使用自己的配置文件。
启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了.
src/redis-server redis.conf
客户端读写:
$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
redis.conf 为redis配置文件,有很多参数供用户修改,这里仅仅
说明几个参数,其他的读者自行搜索。
port: 为redis启动的端口号,当需要启动多个redis服务器时修改该参数,
可以启动多个服务。
bind :绑定ip,设置后只接受自该ip的请求
databases :设置数据库的个数,默认使用的数据库为0,redis有16个数据库,
修改参数可写入不同的数据库。
requirepass :设置登录时需要使用的密码。
下面修改
requirepass 为 zjml123456&&REDIS
那么重启redis-server,放在后台运行。效果就是这样

然后启动客户端使用密码登录并且查询数据:

使用密码命令为:auth 密码
设置key和value的命令为: set key value
取出key对应的value 为: get key
三、使用C++访问redis:
使用redis接口之前需要将hireids.h 和libhiredis.a放到项目目录里,
这两个文件在redis解压目录redis-3.2.8/deps/下
我这里写了一个demo,所以都放在demo的文件夹下了。
下面介绍redis提供的供C++访问的接口
主要包括如下四个方法
1. redisContext* redisConnect(const char *ip, int port)
该函数用来连接redis数据库, 两个参数分别是redis数据库的ip和端口,端口号一般为6379。
2. void *redisCommand(redisContext *c, const char *format...)
该函数用于执行redis数据库中的命令,第一个参数为连接数据库返回的redisContext,剩下的参数
为变参,如同C语言中的prinf()函数。
此函数的返回值为void*,但是一般会强制转换为redisReply类型,以便做进一步的处理。
根据redisReply中的type变量类型判断命令执行情况
REDIS_REPLY_STATUS:
返回执行结果为状态的命令。比如set命令的返回值的类型是REDIS_REPLY_STATUS,然后只有当返回信息是"OK"时,才表示该命令执行成功。
可以通过reply->str得到文字信息,通过reply->len得到信息长度。
REDIS_REPLY_ERROR:
返回错误。错误信息可以通过reply->str得到文字信息,通过reply->len得到信息长度。
REDIS_REPLY_INTEGER:
返回整型标识。可以通过reply->integer变量得到类型为long long的值。
REDIS_REPLY_NIL:
返回nil对象,说明不存在要访问的数据。
REDIS_REPLY_STRING:
返回字符串标识。可以通过reply->str得到具体值,通过reply->len得到信息长度。
REDIS_REPLY_ARRAY:
返回数据集标识。数据集中元素的数目可以通过reply->elements获得,每个元素是个redisReply对象,
元素值可以通过reply->element[..index..].*形式获得,用在获取多个数据结果的操作。
3. void freeReplyObject(void *reply)
释放redisCommand执行后返回的的redisReply所占用的内存。
4. void redisFree(redisContext *c)
释放redisConnect()所产生的连接。
下面是我封装的一个C++访问redis的类
RedisManager.h
class RedisManager
{
public: RedisManager();
virtual ~RedisManager();
//初始化函数
bool initial();
//释放函数
void release();
//封装的set接口
void set(std::string key, std::string value);
//封装的get接口
std::string get(std::string key); private: //连接的缓存指针
redisContext* m_pConnect;
//请求处理结果指针
redisReply* m_pReply;
};
RedisManager.cpp
分别介绍几个接口:
构造函数和析构函数没写代码,下面是初始化函数:
初始化函数:
bool RedisManager::initial()
{
//redis服务器ip
const char* redisIp = "192.168.1.40";
//redis服务器端口
int redisPort = ;
//连接redis服务器
m_pConnect = redisConnect(redisIp, redisPort);
m_pReply = NULL;
if(!m_pConnect)
{
return false;
}
if (m_pConnect != NULL && m_pConnect->err) {
cout << " redis connect failed!!!!" << endl;
return false;
}
//根据密码登录
m_pReply =(redisReply*) redisCommand(m_pConnect, "AUTH %s", mypass.c_str());
if(!m_pReply)
{
cout << "redis exe failed!!"<<endl;
return false;
} if( !(m_pReply->type == REDIS_REPLY_STATUS && strcasecmp(m_pReply->str,"OK")==))
{
cout << " redis auth failed!!!!" << endl;
freeReplyObject(m_pReply );
m_pReply = NULL;
return false;
} freeReplyObject(this->m_pReply );
m_pReply = NULL; cout << " redis auth success!!!!" << endl;
return true;
}
释放函数:
void RedisManager::release()
{
//释放连接
freeReplyObject(m_pConnect);
m_pConnect = NULL;
m_pReply = NULL;
}
set函数:
void RedisManager::set(std::string key, std::string value)
{
//设置key和value关系,插入redis
redisReply* r =(redisReply*)redisCommand(this->m_pConnect, "SET %s %s", key.c_str(), value.c_str());
if(!r)
{
cout << "set redis faliled" << endl;
return;
} //执行失败
if( !(r->type == REDIS_REPLY_STATUS && strcasecmp(r->str,"OK")==))
{
cout << "set redis faliled" << endl;
freeReplyObject(r );
return;
} cout << "set redis success"<<endl;
freeReplyObject(r );
}
get函数:
std::string RedisManager::get(std::string key)
{
//根据key获取value
m_pReply = (redisReply*)redisCommand(this->m_pConnect, "GET %s", key.c_str());
if(!m_pReply)
{
cout << "get value failed" << endl;
return "";
}
//get成功返回结果为 REDIS_REPLY_STRING
if( m_pReply->type != REDIS_REPLY_STRING )
{
cout << "get redis faliled" << endl;
freeReplyObject(m_pReply );
m_pReply = NULL;
return "";
}
cout << "get redis success"<<endl;
std::string valuestr = m_pReply->str;
freeReplyObject(m_pReply );
m_pReply = NULL; return valuestr ;
}
main函数:
int main()
{
RedisManager * redisManager = new RedisManager();
if(redisManager)
{
redisManager->initial(); edisManager->set("test","nice to meet u!"); std::string valueStr = redisManager->get("1sdfd"); cout << valueStr << endl; redisManager->release();
delete redisManager;
} }
源码下载地址:
http://download.csdn.net/detail/secondtonone1/9826761
我的微信公众号:

redis 配置和使用(C++)的更多相关文章
- redis 配置
一 Redis 支持写的指令 Redis大概的命令如下:set setnx setex appendincr decr rpush lpush rpushx lpushx linsert lset r ...
- redis配置详解
##redis配置详解 # Redis configuration file example. # # Note that in order to read the configuration fil ...
- Redis配置集群一(window)
因为接下来的项目要使用到redis作为我们项目的缓存,所以就花了一天时间研究了一下redis的一些用法,因为没转linux虚拟机,所以就决定先研究一下windows版本的redis集群.主要是redi ...
- redis 配置应用(摘)
Redis可以在没有配置文件的情况下通过内置的配置来启动,但是这种启动方式只适用于开发和测试. 合理的配置Redis的方式是提供一个Redis配置文件,这个文件通常叫做redis.conf. redi ...
- redis配置认证密码
redis配置密码1.通过配置文件进行配置yum方式安装的redis配置文件通常在/etc/redis.conf中,打开配置文件找到 #requirepass foobared 去掉行前的注释,并修改 ...
- CentOS6.5下Tomcat7 Nginx Redis配置步骤
所有配置均在一台机器上完成,部署拓扑信息如下: 注意:由于Redis配置对jar包和tomcat版本比较严格,请务必使用tomcat7和本文中提供的jar包.下载地址: http://pan.baid ...
- Ubuntu环境下的Redis 配置与C++使用入门
Redis是一个高性能的key-value数据库. Redisedis的出现,非常大程度补偿了memcached这类key/value存储的不足,在部分场合能够对关系数据库起到非常好的补充作用.它 ...
- redis配置密码认证
redis配置密码 1.通过配置文件进行配置yum方式安装的redis配置文件通常在/etc/redis.conf中,打开配置文件找到 ? 1 #requirepass foobared 去掉行前的注 ...
- redis 配置(1)
redis配置密码 1.通过配置文件进行配置yum方式安装的redis配置文件通常在/etc/redis.conf中,打开配置文件找到 #requirepass foobared 去掉行前的注释,并修 ...
- C# Redis学习系列三:Redis配置主从
Redis配置主从 主IP :端口 192.168.0.103 6666 从IP:端口 192.168.0.108 3333 配置从库 (1)安装服务: redis-server ...
随机推荐
- 笔试题——C++字符排序
题目:字符排序 题目介绍:输入一组以空格隔开的字数串,将它们奇数位升序排序,偶数位降序排序,再重新输出成新的字数串. 例: 输入: 4 6 2 3 6 7 8 1 奇数位:4 2 6 8 ——2 4 ...
- hbase优化操作与建议
一.服务端调优 1.参数配置 1).hbase.regionserver.handler.count:该设置决定了处理RPC的线程数量,默认值是10,通常可以调大,比如:150,当请求内容很大(上MB ...
- VisualSVN Server的配置和使用方法
VisualSVN Server的配置和使用方法 VisualSVN Server的配置和使用方法[服务器端] 安装好VisualSVN Server后[安装过程看这里],运行VisualSVN Se ...
- 获取文件夹下某个类型的文件名---基于python
方法1:import osclass flist_name(): def __init__(self,path): self.flist_name=os.listdir(path) def pcap_ ...
- 作业要求20181113-4 Beta阶段第1周/共2周 Scrum立会报告+燃尽图 03
作业要求:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2385 版本控制:[https://git.coding.net/lglr201 ...
- 解决Ubuntu16.04下git clone太慢问题
记录一些博客,省着自己再去找了... ss-qt5安装 生成.pac genpac --pac-proxy "SOCKS5 127.0.0.1:1080" --gfwlist-pr ...
- HDU 5172 GTY's gay friends 线段树+前缀和+全排列
题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5172 bc(中文):http://bestcoder.hdu.edu.cn/contest ...
- 在Asp.Net中使用Redis【本文摘自智车芯官网】
Redis安装 在安装之前需要获取Redis安装包.在这里我们就不详细介绍安装包的获取了.这里Redis-x64-3.2.100.zip安装包为例通过dos命令取安装.通过dos命令找到安装目录. 在 ...
- 软工网络15团队作业4-DAY8
每日例会 昨天的工作. 张陈东芳:可导入部分类信息,继续尝试将所有信息导入: 吴敏烽:商品类的规范化编写: 周汉麟:界面的排版继续优化: 林振斌:按照浏览历史,次数等,继续优化商品类排序: 李智:研究 ...
- QSet使用及Qt自定义类型使用QHash等算法
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QSet使用及Qt自定义类型使用QHash等算法 本文地址:http://techie ...