zoukankan      html  css  js  c++  java
  • C语言使用hiredis访问redis

    Hiredis 是Redis数据库的简约C客户端库。它是简约的,因为它只是增加了对协议的最小支持,但是同时它使用了一个高级别的 printf-like API,所以对于习惯了 printf 风格的C编程用户来说,其非常容易使用,而且API中没有明确的绑定每个 Redis 命令。

    Github: https://github.com/redis/hiredis

    安装hiredis

    编译安装:

    $ git clone git@github.com:redis/hiredis.git
    $ cd hiredis
    $ make 
    $ make install
    

    下面是make install的输出:

    mkdir -p /usr/local/include/hiredis /usr/local/include/hiredis/adapters /usr/local/lib
    cp -pPR hiredis.h async.h read.h sds.h /usr/local/include/hiredis
    cp -pPR adapters/*.h /usr/local/include/hiredis/adapters
    cp -pPR libhiredis.so /usr/local/lib/libhiredis.so.0.13
    cd /usr/local/lib && ln -sf libhiredis.so.0.13 libhiredis.so
    cp -pPR libhiredis.a /usr/local/lib
    mkdir -p /usr/local/lib/pkgconfig
    cp -pPR hiredis.pc /usr/local/lib/pkgconfig
    

    复制动态链接库到lib:

    cp libhiredis.so /usr/lib64 /usr/lib 
    

    若是32系统只需要运行:

    cp libhiredis.so /usr/lib
    

    还需要更新下动态链接库缓存:

    /sbin/ldconfig
    

    ldconfig 命令的用途主要是在默认搜寻目录 /lib/usr/lib 以及动态库配置文件 /etc/ld.so.conf 内所列的目录下,搜索出可共享的动态链接库(格式如lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件。缓存文件默认为 /etc/ld.so.cache ,此文件保存已排好序的动态链接库名字列表,为了让动态链接库为系统所共享,需运行动态链接库的管理命令 ldconfig ,此执行程序存放在/sbin目录下。

    ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令。

    客户端代码

    test.c

    #include <stdio.h>  
    #include <hiredis/hiredis.h>  
      
    int main()  
    {  
        redisContext* conn = redisConnect("127.0.0.1", 6379);  
        if(conn->err)   printf("connection error:%s
    ", conn->errstr);  
      
        redisReply* reply = redisCommand(conn, "set foo 1234");  
        freeReplyObject(reply);  
      
        reply = redisCommand(conn, "get foo");  
      
        printf("%s
    ", reply->str);  
        freeReplyObject(reply);  
      
        redisFree(conn);  
      
        return 0;  
    }
    

    然后:

    $ gcc test.c -o test -lhiredis
    

    编译是一定要使用-l连接动态库。

    -lstack 告诉编译器要链接 lhiredis 库。

    运行:

    $ ./test
    1234
    

    函数原型

    redisConnect

    redisContext *redisConnect(const char *ip, int port)
    

    说明:该函数用来连接redis数据库,参数为数据库的ip地址和端口,一般redis数据库的端口为6379。

    该函数返回一个结构体redisContext

    redisCommand

    void *redisCommand(redisContext *c, const char *format, ...);
    

    说明:该函数执行命令,就如sql数据库中的SQL语句一样,只是执行的是redis数据库中的操作命令,第一个参数为连接数据库时返回的redisContext,剩下的参数为变参,就如C标准函数printf函数一样的变参。

    返回值为void*,一般强制转换成为redisReply类型的进行进一步的处理。

    freeReplyObject

    void freeReplyObject(void *reply);
    

    说明:释放 redisCommand 执行后返回的 redisReply 所占用的内存。

    redisFree

    void redisFree(redisContext *c);
    

    说明:释放 redisConnect() 所产生的连接。

    参考

    1、Redis:安装、配置、操作和简单代码实例(C语言Client端) - CSDN博客
    https://blog.csdn.net/hj19870806/article/details/8724907
    2、C语言访问redis(hiredis) - CSDN博客
    https://blog.csdn.net/sole_cc/article/details/38015765
    3、error while loading shared libraries问题解决 - CSDN博客
    https://blog.csdn.net/qgd19931120/article/details/50971142
    4、ldconfig命令_Linux ldconfig 命令用法详解:动态链接库管理命令
    http://man.linuxde.net/ldconfig?mstqrk=qdwrv1

  • 相关阅读:
    java多线程(同步与死锁问题,生产者与消费者问题)
    剑指OFFER之跳台阶(九度OJ1388)
    剑指OFFER之二维数组中的查找(九度OJ1384)
    剑指OFFER之旋转数组的最小数字(九度OJ1386)
    我所思考的生活,致半年后的自己
    剑指OFFER之用两个栈实现队列(九度OJ1512)
    剑指OFFER之二维数组中的查找(九度OJ1384)
    剑指OFFER之重建二叉树(九度OJ1385)
    简单的客户机服务器投射模拟
    网络复习之TCP
  • 原文地址:https://www.cnblogs.com/52fhy/p/9196527.html
Copyright © 2011-2022 走看看