redis為什麼可以這麼快?
今天我在一個技術群裡提出一個問題:Redis為什麼這麼快,Redis的那些特效能夠支援了它的高併發?
之前的我,也只是知道Redis是記憶體資料庫,所以讀取速度快;IO使用的是多路複用(多路網路連線複用一個IO執行緒),使用一個執行緒來輪詢描述符,減少了執行緒上下文的切換,將資料庫的開、關、讀、寫都轉化成了時間,所以IO時也有加速。雖然理解上就是這些(當然還有一些資料結構的原因,全程使用hash結構,加速讀寫)
突然想寫下來,供大家看一下,也想請大神批評指正一下。
Redis的高併發和快速原因很多,總結一下幾點:
1. Redis是純記憶體資料庫,一般都是簡單的存取操作,執行緒佔用的時間很多,時間的花費主要集中在IO上,所以讀取速度快。
2. 再說一下IO,Redis使用的是非阻塞IO,IO多路複用,使用了單執行緒來輪詢描述符,將資料庫的開、關、讀、寫都轉換成了事件,減少了執行緒切換時上下文的切換和競爭。
3. Redis採用了單執行緒的模型,保證了每個操作的原子性,也減少了執行緒的上下文切換和競爭。
4. 另外,資料結構也幫了不少忙,Redis全程使用hash結構,讀取速度快,還有一些特殊的資料結構,對資料儲存進行了優化,如壓縮表,對短資料進行壓縮儲存,再如,跳錶,使用有序的資料結構加快讀取的速度。
5. 還有一點,Redis採用自己實現的事件分離器,效率比較高,內部採用非阻塞的執行方式,吞吐能力比較大。
最後,附兩張圖,讓大家更加深刻的理解Redis的架構和記憶體模型:
Redis的工作流程圖
原文連結:https://blog.csdn.net/a6833916180/article/details/51260243