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

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


咨詢
建站咨詢
