c++ redis-client
http://hahaya.github.io/operator-redis-under-linux/#0-tsina-1-10809-397232819ff9a47a7b7e80a40613cfe1
Linux下C++操作Redis
作者:hahaya
日期:2014-03-12
介绍
Redis的全称是Remote Dictonary Server(远程字典服务器),redis是由Salvatore Sanfilippo写的一个高性能key-value存储系统,Redis有如下优点:
1. 高性能 - Redis能支持超过100K+每秒的读写频率
2. 丰富的数据类型 - Redis支持Strings、Lists、Hashes、Sets及Ordered Sets等数据类型
3. 原子性 - Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子操作
4. 丰富的特性 - Redis还支持发布/订阅、事务、key过期等特性
安装Redis
打开Redis官网,进入下载页面,选择一个适合自己电脑的版本下载即可,下载飞机票http://redis.io/download,下载完成后解压、编译、安装,依次在终端下执行如下命令:
tar -zxvf redis-2.8.7.tar.gz
cd redis-2.8.7
sudo apt-get install tcl(redis测试程序需要tcl版本至少为8.5)
make 32bit(64位系统直接使用make即可)
sudo make install(将编译生成的可执行文件拷贝到/usr/local/bin目录下)
make test(用于确认安装正确与否)
编译生成的可执行文件有:
1. redis-server redis服务器
2. redis-cli redis客户端
3. redis-benchmark redis性能测试工具
4. redis-check-aof aof文件修复工具
5. redis-check-dump rdb文件检查工具
6. redis-sentinel redis集群管理工具
编译、安装完成后,在终端中输入redis-server
以最简单的方式启动redis服务端,然后在另一个终端中输入redis-cli
来连接redis服务端,接下来可以尝试各种命令了,可以在http://try.redis.io预习下redis的各种命令,还可以在redis官网查看redis支持的命令。
安装hiredis
需要使用C/C++操作Redis,就需要安装C/C++ Redis Client Library,这里我使用的是hiredis,这是官方使用的库,而且用得人比较多,在终端下依次执行下列命令进行下载、安装:
git clone https://github.com/redis/hiredis
cd hiredis
make
sudo make install(复制生成的库到/usr/local/lib目录下)
sudo ldconfig /usr/local/lib
C/C++操作Redis
所有的准备工作已经做完了,接下来测试下如何使用C/C++操作Redis,代码如下:
#include <hiredis/hiredis.h>
#include <iostream>
#include <string>
int main(int argc, char **argv)
{
struct timeval timeout = {2, 0}; //2s的超时时间
//redisContext是Redis操作对象
redisContext *pRedisContext = (redisContext*)redisConnectWithTimeout("127.0.0.1", 6379, timeout);
if ( (NULL == pRedisContext) || (pRedisContext->err) )
{
if (pRedisContext)
{
std::cout << "connect error:" << pRedisContext->errstr << std::endl;
}
else
{
std::cout << "connect error: can't allocate redis context." << std::endl;
}
return -1;
}
//redisReply是Redis命令回复对象 redis返回的信息保存在redisReply对象中
redisReply *pRedisReply = (redisReply*)redisCommand(pRedisContext, "INFO"); //执行INFO命令
std::cout << pRedisReply->str << std::endl;
//当多条Redis命令使用同一个redisReply对象时
//每一次执行完Redis命令后需要清空redisReply 以免对下一次的Redis操作造成影响
freeReplyObject(pRedisReply);
return 0;
}
保存退出,执行g++ OperatorRedis.cpp -o OperatorRedis -lhiredis
进行编译,编译完成后执行./OperatorRedis
运行程序(在运行程序前需要启动redis服务端,否则会得到connect error:Connection refused
这样的错误),不出意外的话会看到输出的redis服务器信息~
好了,C++操作Redis先进行到这里了,我这边封装了一个C++操作Redis的类,等完善后会放出来...
Redis学习链接
- http://redis.io/:Redis官网
- http://redis.cn/:Redis中文官网
- http://try.redis.io/:在线体验Redis
- https://github.com/antirez/redis:Redis开发版本源码
- http://www.redisdoc.com/en/latest/:Redis命令参考
- http://blog.nosqlfan.com/topics/redis:Redis系类文章
- http://redisbook.readthedocs.org/en/latest/:Redis设计与实现
- https://github.com/huangz1990/annotated_redis_source:注释版Redis源码
c++ redis-client的更多相关文章
- 深入浅出 Redis client/server交互流程
综述 最近笔者阅读并研究redis源码,在redis客户端与服务器端交互这个内容点上,需要参考网上一些文章,但是遗憾的是发现大部分文章都断断续续的非系统性的,不能给读者此交互流程的整体把握.所以这里我 ...
- Redis 详解 (一) StackExchange.Redis Client
这期我们来看StackExchange.Redis,这是redis 的.net客户端之一.Redis是一个开源的内存数据存储,可以用来做数据库,缓存或者消息代理服务.目前有不少人在使用ServiceS ...
- redis client protocol 分解
在官方网站http://redis.io/topics/protocol我们必须redis通信协议做说明. 根据以下某些原因.我想解决redis client protocol: 1.足够了解通信协议 ...
- StackExchange.Redis Client
StackExchange.Redis Client 这期我们来看StackExchange.Redis,这是redis 的.net客户端之一.Redis是一个开源的内存数据存储,可以用来做数据库,缓 ...
- Redis client Python usage
http://www.yiibai.com/redis/redis_sorted_sets.html mport redis r_server = redis.Redis('localhost') # ...
- 咏南中间件开始支持redis client接口调用
咏南中间件开始支持redis client接口调用 咏南中间件封装了redis client接口,可以支持REDIS了. 如下图,将数据集写入REDIS缓存,和从REDIS缓存获取数据: proced ...
- 【轮子狂魔】手把手教你自造Redis Client
为什么做Redis Client? Redis Client顾名思义,redis的客户端,主要是封装了一些对于Redis的操作. 而目前用的比较广泛的 ServiceStack.Redis 不学好,居 ...
- redis集群错误解决:/usr/lib/ruby/gems/1.8/gems/redis-3.0.0/lib/redis/client.rb:79:in `call': ERR Slot 15495 is already busy (Redis::CommandError)
错误信息: /usr/lib/ruby/gems/1.8/gems/redis-3.0.0/lib/redis/client.rb:79:in `call': ERR Slot 15495 is al ...
- redis client 2.0.0 pipeline 的list的rpop bug
描写叙述: redis client 2.0.0 pipeline 的list的rpop 存在严重bug,rpop list的时候,假设list已经为空的时候,rpop出来的Response依旧不为n ...
- lettuce--Advanced Redis client
redis官方提供的java client: git地址:https://github.com/mp911de/lettuceAdvanced Redis client for thread-safe ...
随机推荐
- Jmeter学习(一)
最近测了一个导出功能,感觉应该学习下Jmeter,WEB系统的性能系统还是需要有一定累积. 选择Jmeter而不是LR,很简单的原因是QTP和LR不能装一台机器上. 也有很多测试人员推荐Jmeter, ...
- Ajax form表单提交
1. 使用 $("form").serialize() 来获取表单数据 $.ajax({ type: 'post', url: 'your url', data: $(" ...
- mysql的操作
关系型数据库是表格形式,比普通文件存储访问数据的速度更快,更容易查阅和提取满足特定条件的数据 关系数据库具有内置的权限系统 每一条数据对应唯一的标识 1,打开XAMPP继承的数据库 打开mysql ...
- MemCache中的内存管理详解
MC的内存管理机制 1.内存的碎片化 当我们使用C语言或者其他语言进行malloc(申请内存),free(释放内存)等类似的命令操作内存的时候, 在不断的申请和释放的过程中,形成了一些很小的内存片段, ...
- Java小游戏贪吃蛇
package snake; import java.awt.BorderLayout;import java.awt.Canvas;import java.awt.Color;import java ...
- python3 jason & pickle
#Author by Andy#_*_ coding:utf-8 _*_import jsonimport pickledef sayhello(name): print('Hello %s' %na ...
- JavaScript实现输入验证(简单的用户注册)
1.先写用户注册页面userrAdd.jsp <body> <center> <form name="f1" id="f1" ac ...
- Asp.net的request类
ASP.NET获取客户端信息,暂时就这几个,有待添加~~ 1. 在ASP.NET中专用属性: 获取服务器电脑名:Page.Server.ManchineName 获取用户信息:Page.User 获取 ...
- Windows 2003 EE升级服务错误号:0x8DDD0018 解决办法
错误提示: [错误号: 0x8DDD0018] 此站点无法继续,因为这些 Windows 服务中的一个或多个没有运行: “自动更新”功能(允许站点查找.下载和安装适用于您的计算机的高优先级更新程序) ...
- php时间设置为本地
PHP Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to ...