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\n", conn->errstr);  
  
    redisReply* reply = redisCommand(conn, "set foo 1234");  
    freeReplyObject(reply);  
  
    reply = redisCommand(conn, "get foo");  
  
    printf("%s\n", 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM