今天我在乙個技術群裡提出乙個問題:redis為什麼這麼快,redis的那些特性能夠支援了它的高併發?
之前的我,也只是知道redis是記憶體資料庫,所以讀取速度快;io使用的是多路復用,使用乙個執行緒來輪詢描述符,減少了執行緒上下文的切換,將資料庫的開、關、讀、寫都轉化成了時間,所以io時也有加速。雖然理解上就是這些(當然還有一些資料結構的原因,全程使用hash結構,加速讀寫)
突然想寫下來,供大家看一下,也想請大神批評指正一下。
redis的高併發和快速原因很多,總結一下幾點:
1. redis是純記憶體資料庫,一般都是簡單的訪問操作,執行緒占用的時間很多,時間的花費主要集中在io上,所以讀取速度快。
2. 再說一下io,redis使用的是非阻塞io,io多路復用,使用了單執行緒來輪詢描述符,將資料庫的開、關、讀、寫都轉換成了事件,減少了執行緒切換時上下文的切換和競爭。
3. redis採用了單執行緒的模型,保證了每個操作的原子性,也減少了執行緒的上下文切換和競爭。
4. 另外,資料結構也幫了不少忙,redis全程使用hash結構,讀取速度快,還有一些特殊的資料結構,對資料儲存進行了優化,如壓縮表,對短資料進行壓縮儲存,再如,跳表,使用有序的資料結構加快讀取的速度。
5. 還有一點,redis採用自己實現的事件分離器,效率比較高,內部採用非阻塞的執行方式,吞吐能力比較大。
6.這裡重點介紹一下epoll,因為redis事件管理器核心實現基本依賴於它。首先來看epoll是什麼,它能做什麼?
epoll是在linux 2.6核心中引進的,是一種強大的i/o多路復用技術,上面我們已經說到在進行網路操作的時候是通過檔案描述符來進行讀寫的,那麼平常我們就是乙個程序操作乙個檔案描述符。然而epoll可以通過乙個檔案描述符管理多個檔案描述符,並且不阻塞i/o。這使得我們單程序可以操作多個檔案描述符,這就是redis在高併發效能還如此強大的原因之一。
Redis為什麼這麼快?
1 完全基於記憶體,絕大部分請求是純粹的記憶體操作,非常快速。資料存在記憶體中,類似於hashmap,hashmap的優勢就是查詢和操作的時間複雜度都是o 1 2 資料結構簡單,對資料操作也簡單,redis中的資料結構是專門進行設計的 3 採用單執行緒,避免了不必要的上下文切換和競爭條件,也不存在多...
Redis為什麼這麼快?
目錄 一 redis為什麼這麼快?二 redis為什麼是單執行緒的?redis採用的是基於記憶體的採用的是單程序單執行緒模型的 kv 資料庫,由c語言編寫,官方提供的資料是可以達到100000 的qps 每秒內查詢次數 以下幾點造就了redis非常快的特點 採用單執行緒避免了不必要的上下文切換和競爭...
Redis為什麼這麼快
redis採用的是基於記憶體的採用的是單程序單執行緒模型的kv 資料庫,由c語言編寫,官方提供的資料是可以達到100000 的qps 每秒內查詢次數 簡單測試 2g單核 ping inline 82236.84 requests per second ping bulk 89525.52 reque...