前言
安装redis之后,一般要结合编程语言实现对redis的数据操作。hiredis是redis提供的c语言API包。本篇就介绍一下linux下hiredis的安装和C接口编程,包括编译运行过程中要注意的点和遇到的问题也一一列出。
再按照以下步骤操作之前,默认机器上已经安装并启动了redis。测试是否启动了redis服务,使用以下命令:
redis-cli
或
ps -ef|grep redis
若出现图中所示画面,说明redis-server已经启动。
1.hiredis的安装
(1)hiredis源码获取
github:https://github.com/redis/hiredis,使用命令获取hiredis源码
git clone https://github.com/redis/hiredis.git
(2)编译安装
make
make install
2. hiredis C接口编程
主要接口
主要有4个接口,
1)redisContext* redisConnect(const char *ip, int port)
//连接redis。
2)void *redisCommand(redisContext *c, const char *format, ...);
//执行redis操作命令,支持可变参数
3)void freeReplyObject(void *reply);
//释放执行redis操作命令回复的内存
4)void redisFree(redisContext *c);
//释放连接上下文。
异常处理:
主要4种异常情况会出现,
1)获得的redisContext指针为null
异常处理办法:再次尝试与redis建立新的连接上下文。
2)获得的redisContext指针err不为0
异常处理办法:再次尝试与redis建立新的连接上下文。
3)获得的redisReply指针为null
异常处理办法:断开redis连接再次与redis建立连接并尝试执行命令。
4)获得的reply指针的type不是期望的类型,
异常处理办法:断开redis连接再次与redis建立连接并尝试执行命令。
demo:
#include <iostream>
#include "hiredis/hiredis.h"
using namespace std;
int main()
{
redisContext *pContext = redisConnect("127.0.0.1",6379); //建立连接
if(pContext->err)
{
redisFree(pContext);
cout << "connect to redisServer fail" << endl;
return -1;
}
cout << "connect to redisServer success" << endl;
//执行命令
redisReply *pReply = (redisReply*)redisCommand(pContext,"set main helloWorld");
string name = "name";
pReply = (redisReply*)redisCommand(pContext,"set %s xiaoluo",name.c_str());
cout << pReply->str << endl;
pReply = (redisReply*)redisCommand(pContext,"get %s",name.c_str());
cout << pReply->str << endl;
//释放连接
freeReplyObject(pReply);
redisFree(pContext);
return 0;
}
编译:g++ -o main main.cpp -lhiredis,注意,这里的编译需要链接hireds动态库。
运行,之后使用redis-cli打开redis客户端查看数据库中的数据:
3.遇到的错误:
编译时报错:error while loading shared libraries: libhiredis.so.1.0.1-dev: cannot open shared object file: No such file or directory
问题原因
hiredis动态库libhiredis.so.1.0.1-dev 的默认安装路径在/usr/local/lib目录,系统找不到这个动态库。
解决方法
1、检查一下/etc/ld.so.conf文件中是否包含需要的动态库的目录(如/usr/local/lib),如果没有的话就添加进出
2、执行sudo /sbin/ldconfig,更新一下系统动态库配置