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