Hiredis API說明 同步的API介面

2021-12-30 10:25:38 字數 3976 閱讀 7519

同步的api介面

rediscontext *redisconnect(const char *ip, int port);

void *rediscommand(rediscontext *c, const char *format, ...);

void freereplyobject(void *reply);

1)建立連線

rediscontext *c = redisconnect("127.0.0.1", 6379);

if (c != null && c->err) {

printf("error: %s\n", c->errstr);

// handle error

redisconnect函式用來建立乙個叫rediscontext的東西,它包含了連線相關的資訊

它裡面有個err欄位,0表示正常,其他表示出錯了!通過errstr欄位可以知曉錯誤資訊

2)執行命令

reply = rediscommand(context, "set key value");

reply = rediscommand(context, "set key %s", value);

reply = rediscommand(context, "set key %b", value, (size_t) valuelen);

reply = rediscommand(context, "set key:%s %s", myid, value);

rediscommand的呼叫格式類似printf函式,上面的第二條呼叫語句的作用在於

輸入二進位制格式的value內容,其後必須表明二進位制的位元組長度!

3)rediscommand函式返回乙個東西叫redisreply,我們需要通過判斷它的type欄位

來知道返回了具體什麼樣的內容:

redis_reply_status      表示狀態,內容通過str欄位檢視,字串長度是len欄位

redis_reply_error       表示出錯,檢視出錯資訊,如上的str,len欄位

redis_reply_integer    返回整數,從integer欄位獲取值

redis_reply_nil            沒有資料返回

redis_reply_string      返回字串,檢視str,len欄位

redis_reply_array       返回乙個陣列,檢視elements的值(陣列個數),通過

element[index]的方式訪問陣列元素,每個陣列元素是

乙個redisreply物件的指標

4)另外有乙個類似的函式,批量執行命令:

void *rediscommandar**(rediscontext *c, int argc,

const char **ar**, const size_t *ar**len);

5)redisreply使用完畢後,需要使用函式freereplyobject進行釋放銷毀

void redisfree(rediscontext *c)的作用是斷開連線,並釋放rediscontext的內容

6)rediscommand的函式執行流程說明:

a.格式化redis command

b.格式化後的命令內容放入rediscontext的輸出緩衝區

c.呼叫redisgetreply函式執行命令,得到結果

7)管道的使用方式:

a.填入需要執行的命令

void redisappendcommand(rediscontext *c, const char *format, ...);

void redisappendcommandar**(rediscontext *c, int argc,

const char **ar**, const size_t *ar**len);

b.獲取命令的輸出結果

int redisgetreply(rediscontext *c, void **reply);

c.釋放輸出結果

void freereplyobject(void *reply);

例子:redisreply *reply = null;

redisappendcommand(context,"set key1 value");

redisappendcommand(context,"get key2");

redisgetreply(context,&reply); // reply for set

freereplyobject(reply);

redisgetreply(context,&reply); // reply for get

freereplyobject(reply);

訂閱模式:

reply = rediscommand(context,"subscribe test");

freereplyobject(reply);

while(redisgetreply(context,&reply) == redis_ok) {

// consume message

freereplyobject(reply);

8)redisreply返回結果處理:

redis_ok                    正常

redis_err_io          io讀/寫出現異常,通過errno檢視原因

redis_err_eof            伺服器關閉了鏈結,讀結束

redis_err_protocol  分析redis協議內容出錯

edis_err_other          其他未知的錯誤

上述錯誤型別都可以通過redisreply的errstr欄位檢視簡短的描述

c)非同步api(非同步api的使用方式和同步api差不多,在這兒列出不同的函式吧)

1.連線redis伺服器

redisasynccontext *c = redisasyncconnect("127.0.0.1", 6379);

if (c->err) {

printf("error: %s\n", c->errstr);

// handle error

2.設定連線、斷開的鉤子函式

int redisasyncsetconnectcallback(redisasynccontext *ac,

redisconnectcallback *fn);

int redisasyncsetdisconnectcallback(redisasynccontext *ac,

redisdisconnectcallback *fn);

3.插入命令資訊

int redisasynccommand(

redisasynccontext *ac, rediscallbackfn *fn, void *privdata,

const char *format, ...);

int redisasynccommandar**(

redisasynccontext *ac, rediscallbackfn *fn, void *privdata,

int argc, const char **ar**, const size_t *ar**len);

獲取命令輸出和同步api相同

4.關閉連線

void redisasyncdisconnect(redisasynccontext *ac);

d)輔助api

下面的api主要用於其他程式語言繫結的術後,可以讀取分析資料

redisreader *redisreadercreate(void);

void redisreaderfree(redisreader *reader);

int redisreaderfeed(redisreader *reader, const char *buf, size_t len);

int redisreadergetreply(redisreader *reader, void **reply);

同步複製JOB說明

此儲存過程在分發伺服器的任何資料庫上執行。heartbeat interval heartbeat interval 是 程式在不記錄進度訊息的情況下可以執行的最長分鐘數。heartbeat interval 的資料型別為 int,預設值為 10 分鐘。返回 值 sp replication age...

eclipse svn 與資源庫同步 符號說明

eclipse svn同步說明符介紹 右鍵 team 與資源庫同步,顯示的檔案上都有指示符 灰色向右箭頭 本地修改了 灰色向右箭頭且中間有白色減號 本地刪除了,伺服器未刪除 灰色向右且中間有個加號的箭頭 本地比svn上多出的檔案 藍色向左箭頭 svn上修改過 藍色向左且中間有個加號的箭頭 svn上比...

eclipse svn 與資源庫同步 符號說明

一 右鍵 team 與資源庫同步,顯示的檔案上都有指示符 a.灰色向右箭頭 本地修改了 灰色向右箭頭且中間有白色減號 本地刪除了,伺服器未刪除 灰色向右且中間有個加號的箭頭 本地比svn上多出的檔案 b.藍色向左箭頭 svn上修改過 藍色向左且中間有個加號的箭頭 svn上比本地多出的檔案 藍色向左且...