Redis是純記憶體資料庫,通常都是簡單的存取操作,執行緒佔用的時間很多,時間的花費主要集中在IO上,所以讀取速度快。 (建議學習:Redis視訊教學)
再說一下IO,Redis使用的是非阻塞IO,IO多路復用,使用了單執行緒來輪詢描述符,將資料庫的開、關、讀、寫都轉換成了事件,減少了執行緒切換時上下文的切換和競爭。
Redis採用了單執行緒的模型,保證了每個操作的原子性,也減少了執行緒的上下文切換和競爭。
另外,資料結構也幫了不少忙,Redis全程使用hash結構,讀取速度快,還有一些特殊的資料結構,對資料儲存進行了最佳化,如壓縮表,對短資料進行壓縮存儲,再如,跳表,使用有序的資料結構加快讀取的速度。
還有一點,Redis採用自己實現的事件分離器,效率比較高,內部採用非阻塞的執行方式,吞吐能力比較大。
完全基於內存,絕大部分請求是純粹的內存操作,而且非常快速。
資料存在記憶體中,類似HashMap,HashMap的優勢就是查找和操作的時間複雜度都是O(1);
使用多路I/O復用模型,非阻塞IO;
使用底層模型不同,它們之間底層實作方式以及與客戶端之間通訊的應用協定不一樣,Redis直接自己建構了VM 機制,因為一般的系統調用系統函數的話,會浪費一定的時間去移動和請求;以上幾點都比較好理解,下邊我們針對多路I/O 復用模型進行簡單的探討:(1)多路I/O 復用模型
多路I/O復用模型是利用select、poll、epoll 可以同時監察多個流的I/O 事件的能力,在空閒的時候,會把當前線程阻塞掉,當有一個或多個流有I/O 事件時,就從阻塞態中喚醒,於是程式就會輪詢一遍所有的流(epoll 是隻輪詢那些真正發出了事件的流),並且只依次順序的處理就緒的流,這種做法就避免了大量的無用操作。 這裡「多路」指的是多個網路連接,「重複使用」指的是複用同一個執行緒。採用多路I/O 復用技術可以讓單一執行緒高效的處理多個連線請求(盡量減少網路IO 的時間消耗),且Redis 在記憶體中操作資料的速度非常快,也就是說記憶體內的操作不會成為影響Redis效能的瓶頸,主要由以上幾點造就了Redis 具有很高的吞吐量。 更多Redis相關技術文章,請造訪Redis資料庫使用入門教學欄位學習!
以上是redis為什麼很快的詳細內容。更多資訊請關注PHP中文網其他相關文章!