新聞中心
??隨著越來越多的應用轉向使用Redis做跨進程、跨服務之間的通信,部分應用在對Redis數(shù)據(jù)庫進行寫服務時,將RedHat作為多線程,當多線程同時寫入Redis之中,就會面臨超時風險。

創(chuàng)新互聯(lián)建站主要從事網(wǎng)站制作、網(wǎng)站建設、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務江州,十多年網(wǎng)站建設經驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:18980820575
??當多線程同時且異步地寫入Redis時,因為每個線程寫庫的耗時不一,會導致寫入隊列一直被占用,從而使線程之間的通信失敗,出現(xiàn)各種超時現(xiàn)象。以下是異步多線程寫入Redis面臨超時風險的示例代碼:
import redis, threading
from time import sleep
#establish connection to redis
r = redis.Redis(host='localhost', port=6379, db=0)
def thread_function(name):
r.set(name,0, 10)
sleep(2)
print(r.get(name))
Thread1 = threading.Thread(target=thread_function, args=('key1',))
Thread2 = threading.Thread(target=thread_function, args=('key2',))
# Starting thread 1 and 2
Thread1.start()
Thread2.start()
# wt until thread 1 and 2 are completely executed
Thread1.join()
Thread2.join()
??以上代碼中,線程1和線程2同時訪問Redis,但是根據(jù)線程2睡眠時間,線程1先結束,會導致后續(xù)操作線程2寫入Redis時可能因寫庫隊列一直被線程1占用,從而超時。
??面對異步多線程寫入Redis面臨超時風險,我們可以考慮使用帶超時的Redis命令,及時釋放寫入鎖資源;適當增加可以復用的連接池,以減少連接建立的時間;增加寫入超時控制因子等等。另外,為此,可以使用熔斷模式,如果Redis寫入服務在規(guī)定時間內沒有完成,就放棄寫入,切換到替代寫入方式中去。
??異步多線程寫入Redis面臨超時風險,可以從Redis命令、復用連接池、寫入超時控制因子、使用熔斷模式等多個方面去盡量減小超時的可能性,從而提高寫入Redis的效率和性能。
香港服務器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務提供商,擁有超過10年的服務器租用、服務器托管、云服務器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務器、香港云服務器、免備案服務器等。
網(wǎng)頁題目:異步多線程寫入Redis面臨超時風險(多線程寫入redis超時)
路徑分享:http://www.5511xx.com/article/dhidssp.html


咨詢
建站咨詢
