Redis為什麼快,熱key解決

2021-10-10 10:49:23 字數 707 閱讀 5166

redis的速度非常的快,單機的redis就可以支撐每秒10幾萬的併發,相對於mysql來說,效能是mysql的幾十倍。速度快的原因主要有幾點:

完全基於記憶體操作

c語言實現,優化過的資料結構,基於幾種基礎的資料結構,redis做了大量的優化,效能極高

使用單執行緒,無上下文的切換成本

基於非阻塞的io多路復用機制

redis使用多執行緒並非是完全摒棄單執行緒,redis還是使用單執行緒模型來處理客戶端的請求,只是使用多執行緒來處理資料的讀寫和協議解析,執行命令還是使用單執行緒。

這樣做的目的是因為redis的效能瓶頸在於網路io而非cpu,使用多執行緒能提公升io讀寫的效率,從而整體提高redis的效能。

所謂熱key問題就是,突然有幾十萬的請求去訪問redis上的某個特定key,那麼這樣會造成流量過於集中,達到物理網絡卡上限,從而導致這台redis的伺服器宕機引發雪崩。

針對熱key的解決方案:

提前把熱key打散到不同的伺服器,降低壓力

加入二級快取,提前載入熱key資料到記憶體中,如果redis宕機,走記憶體查詢

redis為什麼快

如果我們執行的伺服器是多核伺服器,為了充分利用多核優勢我們可以在單台伺服器起多個 redis 服務,或者架設 主從複製 哨兵模式 集群模式等多機方案。redis 服務執行時只是處理客戶端請求是單程序單執行緒的,但是服務執行時會有其他程序或執行緒處理其他的事,比如rdb的檔案的生成就會在子程序中進行等...

redis 為什麼快

redis採用自己實現的事件分離器,效率比較高,內部採用非阻塞的執行方式,吞吐能力比較大。不過,因為一般的記憶體操作都是簡單訪問操作,執行緒占用時間相對較短,主要問題在io上,因此,redis這種模型是合適的,但是如果某乙個執行緒出現問題導致執行緒占用很長時間,那麼reids的單執行緒模型效率可想而...

Redis為什麼這麼快?

今天我在乙個技術群裡提出乙個問題 redis為什麼這麼快,redis的那些特性能夠支援了它的高併發?之前的我,也只是知道redis是記憶體資料庫,所以讀取速度快 io使用的是多路復用,使用乙個執行緒來輪詢描述符,減少了執行緒上下文的切換,將資料庫的開 關 讀 寫都轉化成了時間,所以io時也有加速。雖...