日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

mysql 异步api_Hiredis异步API

發布時間:2023/11/27 生活经验 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 异步api_Hiredis异步API 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

異步API Hiredis 擁有一個套異步API方便與一些事件庫協同工作. Hiredis的代碼中涵蓋了hiredis與libev和libevent這兩個庫結合使用的例子. 連接 函數 redisAsyncConnect 用來建立到redis服務器的非阻塞連接. 返回一個 redisAsyncContext 結構體指針. 因為建立

異步API

Hiredis 擁有一個套異步API方便與一些事件庫協同工作.

Hiredis的代碼中涵蓋了hiredis與libev和libevent這兩個庫結合使用的例子.

連接

函數 redisAsyncConnect 用來建立到redis服務器的非阻塞連接.

返回一個 redisAsyncContext 結構體指針. 因為建立的連接是非阻塞的,無法立即返回目標主機的ip和端口是否可達。所以在建立連接后,我們應該檢查 err 成員,來確認連接是否存在錯誤。

redisAsyncContext *c = redisAsyncConnect("127.0.0.1", 6379);

if (c->err) {

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

// 錯誤處理

}

redisAsyncContext包含一個連接斷開回調函數(主動斷開,或者發生錯誤都會調用)。此函數原型如下:

void(const redisAsyncContext *c, int status);

當用戶主動斷開連接時, 參數 status 被設置為 REDIS_OK ;

當發生錯誤而導致連接斷開時 status 被設置為REDIS_ERR 。此時我們可以根據 err 成員變量判斷錯誤產生的情況。

當我們需要進行斷線重連時,可以在斷開連接回調函數處理。

每個上下文(redisAsyncContext)實例只能設置一次斷線回調函數,多次調用會返回REDIS_ERR錯誤。

使用以下函數設置斷線回調函數:

int redisAsyncSetDisconnectCallback(redisAsyncContext *ac, redisDisconnectCallback *fn);

發送命令并設置回調

使用redisAsyncContext時,(每幀)發送的命令會自動pipelined(打包發送命令)。所以我們需要設置reply回調函數來進行命令執行后的處理工作。回調函數原型如下:

void(redisAsyncContext *c, void *reply, void *privdata);

參數 privdata 為用戶數據,你可以設置成函數調用時所需要的任意數據。

使用以下函數發送異步命令:

int redisAsyncCommand(

redisAsyncContext *ac, redisCallbackFn *fn, void *privdata,

const char *format, ...);

int redisAsyncCommandArgv(

redisAsyncContext *ac, redisCallbackFn *fn, void *privdata,

int argc, const char **argv, const size_t *argvlen);

這兩個函數和阻塞版本類似。命令成功添加到輸出緩沖區時返回 REDIS_OK ,錯誤時返回 REDIS_ERR 。

例如:當連接被用戶中斷時,新命令無法被添加,所有類似 redisAsyncCommand 的函數調用都返回 REDIS_ERR錯誤碼。

如果將回調函數設置成 NULL (? privdata,還是reply?需要實驗一下

?)內存被立即釋放。當回調函數非空,則內存在調用后釋放內存。reply參數只能在回調函數體中使用。

當上下文(redisAsyncContext)發生錯誤時所有未執行的命令所設置的回調函數都會被調用,回調函數中reply指針為空。

斷開連接

異步連接可以使用以下函數終止:

void redisAsyncDisconnect(redisAsyncContext *ac);

當函數被調用時連接并不是立即被斷開,而是新的命令不在被接受。(調用函數后)當所有未執行的指令都被寫入到socket中,并且命令回調函數都被執行以后,連接才被中斷(連接中斷回調函數被調用,status為 REDIS_OK )、上下文對象被釋放。.

綁定到事件庫

There are a few hooks that need to be set on the context object after it is created. See the adapters/ directory

for bindings to libev and libevent.

本文原創發布php中文網,轉載請注明出處,感謝您的尊重!

總結

以上是生活随笔為你收集整理的mysql 异步api_Hiredis异步API的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。