本文主要介紹redis內部會導致主線程阻塞的點以及對應的解決方案。
主要阻塞點
redis內部主要有五個阻塞點,其中三個可以通過異步解決,從而避開對redis主線程的阻塞。如下圖所示。
redis異步機制
Redis啟動后,會創建三個子線程用於aof日志異步寫入,異步數據刪除(bigkey刪除和清空數據庫)以及異步文件關閉。
無法異步的阻塞操作優化
集合操作和RDB加載屬於redis操作的關鍵路徑(客戶端必須要拿到真正的執行結果)是沒辦法做成異步操作的,對於這兩類操作只能做優化,最大可能的降低阻塞的時間。
集合操作優化
可以少量scan,分批讀取數據,然后到客戶端進行聚合,把工作由redis server移到客戶端
RDB加載優化
控制redis數據量的大小,控制在2-4GB,這樣rdb會以較快的速度加載。