linux下hiredis安装、C接口编程

前言

安装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,更新一下系统动态库配置

猜你喜欢

转载自blog.csdn.net/weixin_44843859/article/details/109470454