天天看點

redis為什麼使用單線程?有什麼好處?redis為什麼使用單線程redis單線程是如何承擔大量并發請求的?如果請求量大于10W的時候怎麼辦?

redis為什麼使用單線程

redis本身是基于記憶體的,是以redis的性能瓶頸更多的是在于記憶體和網絡帶寬,而不是CPU。而單線程的實作更加簡單和經濟

采用單線程,可以使指令串行,不用額外維護鎖機制,避免了不必要的上下文切換和競争條件,減少了CPU的消耗

redis單線程是如何承擔大量并發請求的?

首先redis可以承擔Redis讀的速度是110000次/s,寫的速度是81000次/s ,也就是說redis的qps大概在10W量級上,這個量是很大的,那麼redis是如何做到能夠這麼快的呢?

1、基于記憶體

redis的資料都是存儲在記憶體中的,所有讀寫速度很快

2、單線程,不用維護鎖機制

redis采用單線程機制,指令串行,不用維護額外的鎖機制,資源競争等

3、資料結構簡單,操作簡單

自己内部實作了各種資料結構,根據情況進行了優化

(1)動态字元串結構

(2)hash的字典結構的容量大小取2^N,使取模運算可以轉換為按位運算,更快。同時擴容縮容采用采用漸進式rehash

(3)zset采用跳表結構,範圍查詢更快

(4)list采用壓縮連結清單結構,記憶體空間連續

4、采用了epoll多路複用器

能夠接收大量socket連接配接,并且監控,能将有效socket傳給核心執行後續讀寫操作

redis的VM機制

之前有看到不少部落格都将redis的VM機制納入redis快的原因之一,VM的操作是記憶體滿了将冷資料儲存到磁盤,之前了解到redis的淘汰政策是記憶體滿了将冷資料删除,于是不禁産生這兩個不是沖突嗎的疑問,進一步查詢資料後發現VM機制在redis2.4的時候就已經棄用了,在redis2.6的時候删除了。使用VM反而存在性能問題,可能導緻redis卡死,是以被棄用了。是以個人覺得VM機制不應該再作為redis快的原因

如果請求量大于10W的時候怎麼辦?

這時就要建立redis叢集了,涉及到讀寫分離,主從同步,哨兵監控健康狀态的知識點,詳細可參考下述連接配接的博文,這裡不再做累叙r

如果想了解更多關于redis的工作原理、底層資料結構、分布式鎖、雙寫一緻性、緩存穿透擊穿雪崩等問題可以檢視我的另外一篇部落格:https://blog.csdn.net/qq_24950043/article/details/118316094

繼續閱讀