新聞中心
## 破解Redis重啟后的重連之謎

破解Redis重啟后的重連之謎是一個普遍存在的問題。Redis會在重啟后丟失連接,客戶端無法正確操作Redis。這可能會導(dǎo)致一些服務(wù)狀態(tài)斷開,甚至出現(xiàn)異常。如果客戶端連接可以自動重新建立,就可以避免這種情況。下面我們來看一下如何破解Redis重啟后的重連之謎。
要解決Redis重啟后的重連之謎,必須先看Redis的源代碼實現(xiàn),即redis/src/networking.c文件。這段僅有的7行客戶端重新連接的代碼,就是要解決這個問題的關(guān)鍵:
“`c
void reconnectClients(void) {
listIter li;
listNode *ln;
listRewind(server.clients,&li);
while((ln = listNext(&li)) != NULL) {
client *c = listNodeValue(ln);
/* Don’t reconnect slaves and subscribed clients. */
if (c->flags & (CLIENT_SLAVE|CLIENT_SUBSCRIBED)) continue;
/* This client was created after the reset, don’t reset it. */
if (c->flags & CLIENT_CREATED_AFTER_RESET) continue;
if (server.masterhost && (c->flags & CLIENT_MASTER)) {
freeClient(c);
continue;
}
c->flags |= CLIENT_CONNECTED;
c->rcvtime = server.unixtime;
server.current_client = c;
anetNonBlock(NULL,c->fd);
anetSendTimeout(NULL,c->fd,server.client_max_querybuf_len,c->reply_ctime);
}
}
從上面的代碼可以看出,reconnectClients函數(shù)將遍歷所有的客戶端連接,對于每個連接,會先判斷是否是slave或者subscribed,如果是則跳過,否則會設(shè)置FLAG為CONNECTED,并設(shè)置連接超時時間,從而實現(xiàn)客戶端自動重連。
另外,有時候也可以使用redis-cli客戶端來解決Redis重啟后的重連問題,redis-cli在服務(wù)器重啟后,也會發(fā)起重連,可以避免服務(wù)狀態(tài)斷開。下面是一段有關(guān)重連的redis-cli啟動命令:
redis-cli -h 127.0.0.1 -p 6379 -a PASSWOD –auto-reconnect
以上就是使用redis/src/networking.c文件以及redis-cli來解決Redis重啟后的重連之謎的方法。這些技術(shù)可以有效的保護Redis的安全運行狀態(tài),避免服務(wù)不可用。
創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級標(biāo)準(zhǔn)機房資源,具備完善的安防設(shè)施、三線及BGP網(wǎng)絡(luò)接入帶寬達10T,機柜接入千兆交換機,能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運行;創(chuàng)新互聯(lián)專注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認(rèn)可。
網(wǎng)頁名稱:破解Redis重啟后的重連之謎(redis重啟后重連)
文章網(wǎng)址:http://www.5511xx.com/article/cossgii.html


咨詢
建站咨詢
