新聞中心
Redis是一個開源的、高性能的NoSQL Key-Value數(shù)據(jù)庫,以高可用,高性能,支持數(shù)據(jù)復(fù)制,多數(shù)據(jù)中心以及Lua腳本計算等優(yōu)點而受到用戶的青睞;但是在使用過程中,也不免會出現(xiàn)錯誤,比如在需要關(guān)閉Redis連接時遭遇關(guān)閉無功果,讓用戶不知所措。那么下面就跟大家分享一下這種情況的解決方法。

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、重慶小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了方城免費建站歡迎大家使用!
檢查日志是一個好辦法,通常會找到出錯的原因以及解決方案,以下是關(guān)閉連接遭遇無功果對應(yīng)的日志輸出:
>Err(System.TimeoutException:TimeoutException when trying to close the connection)
從該日志可以看出,關(guān)閉連接時有一個超時異常發(fā)生,表明了Redis無法從客戶端接收關(guān)閉信號,所以無法完成關(guān)閉操作,這類情況常常是由于客戶端等待時間太短所致。
為了解決此問題,首先需要在連接Redis服務(wù)的時候設(shè)置ConnectionTimeout配置,讓等待的時間夠長:
Options options = new Options()
.OverrideConnectionTimeout(TimeSpan.FromSeconds(60))
ConnectionMultiplexer conn = ConnectionMultiplexer.Connect(“127.0.0.1:6379”,options);
此外,調(diào)整closeTimeout參數(shù)也可以解決此問題:
options.CloseTimeout = TimeSpan.FromSeconds(60);
另外,還可以通過shutdown命令來中斷Redis客戶端連接:
conn.GetServer(“127.0.0.1:6379”).Shutdown(allowCommandsToComplete: false);
其實,如果出現(xiàn)這種情況,建議使用腳本廣播的方式來異步的關(guān)閉連接,具體代碼如下:
IDatabase db = conn.GetDatabase();
string luaScript = “for i = 0, KEYS[1] do local c = redis.call(‘quit’,i);print(c);end ;return ‘OK'”;
var scriptResult = db.ScriptEvaluate(luaScript, new RedisKey[] { 10 });
上述代碼實現(xiàn)的邏輯是:為KEYS[1] (此處是10)的所有會話調(diào)用quit命令關(guān)閉連接,它返回“OK”表示操作成功。
總結(jié):Redis連接可能會遭遇關(guān)閉無功果,此時檢查日志是必要的,并通過ConnectionTimeout配置、CloseTimeout參數(shù)配置或者Shutdown命令中斷連接以及Lua腳本廣播的方式來解決此問題。
香港云服務(wù)器機房,創(chuàng)新互聯(lián)(www.cdcxhl.com)專業(yè)云服務(wù)器廠商,回大陸優(yōu)化帶寬,安全/穩(wěn)定/低延遲.創(chuàng)新互聯(lián)助力企業(yè)出海業(yè)務(wù),提供一站式解決方案。香港服務(wù)器-免備案低延遲-雙向CN2+BGP極速互訪!
分享題目:Redis連接遭遇關(guān)閉無功果(redis連接無法關(guān)閉)
分享鏈接:http://m.fisionsoft.com.cn/article/cddjejd.html


咨詢
建站咨詢
