Redis 為什麼速度快

2021-09-23 14:06:55 字數 879 閱讀 9684

1、完全基於記憶體,絕大部分請求是純粹的記憶體操作,非常快速。資料存在記憶體中,類似於hashmap,hashmap的優勢就是查詢和操作的時間複雜度都是o(1);

2、資料結構簡單,對資料操作也簡單,redis中的資料結構是專門進行設計的;

3、採用單執行緒,避免了不必要的上下文切換和競爭條件,也不存在多程序或者多執行緒導致的切換而消耗 cpu,不用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因為可能出現死鎖而導致的效能消耗;

4、使用多路i/o復用模型,非阻塞io;

5、使用底層模型不同,它們之間底層實現方式以及與客戶端之間通訊的應用協議不一樣,redis直接自己構建了vm 機制 ,因為一般的系統呼叫系統函式的話,會浪費一定的時間去移動和請求;

6、多路 i/o 復用模型

多路i/o復用模型是利用 select、poll、epoll 可以同時監察多個流的 i/o 事件的能力,在空閒的時候,會把當前執行緒阻塞掉,當有乙個或多個流有 i/o 事件時,就從阻塞態中喚醒,於是程式就會輪詢一遍所有的流(epoll 是只輪詢那些真正發出了事件的流),並且只依次順序的處理就緒的流,這種做法就避免了大量的無用操作。

這裡「多路」指的是多個網路連線,「復用」指的是復用同乙個執行緒。採用多路 i/o 復用技術可以讓單個執行緒高效的處理多個連線請求(儘量減少網路 io 的時間消耗),且 redis 在記憶體中運算元據的速度非常快,也就是說記憶體內的操作不會成為影響redis效能的瓶頸,主要由以上幾點造就了 redis 具有很高的吞吐量。

我們首先要明白,上邊的種種分析,都是為了營造乙個redis很快的氛圍!官方faq表示,因為redis是基於記憶體的操作,cpu不是redis的瓶頸,redis的瓶頸最有可能是機器記憶體的大小或者網路頻寬。既然單執行緒容易實現,而且cpu不會成為瓶頸,那就順理成章地採用單執行緒的方案了(畢竟採用多執行緒會有很多麻煩!)。

Kafka為什麼速度快

磁碟讀寫的快慢取決於你怎麼使用它,也就是順序讀寫或者隨機讀寫。在順序讀寫的情況下,磁碟的順序讀寫速度和記憶體持平。如果不刪除硬碟肯定會被撐滿,所以kakfa提供了兩種策略來刪除日誌 log.cleanup.policy配置 1 基於時間 檢查當前日誌檔案中是否有保留時間超過設定的閾值來尋找可刪除的日...

redis單執行緒為什麼速度快

1 基本概念 一塊2.gghz的cpu,一秒可以處理2.6 10 9 條命令,一條指令就是0.38ns,切換一次執行緒耗時2000ns,切換執行緒開銷是大的。2 那為什麼有多執行緒 硬碟訪問時間遠遠大於記憶體。當cpu在等待硬碟的時候,它可以先去做別的事情,比如等硬碟要乙個小時,儲存現場需要十五分鐘...

Elasticsearch為什麼速度快之倒排索引?

es的速度快是多方面的原因,此篇博文主要從資料儲存方面來解釋為什麼es的速度快。es中的乙個shard就是乙個lucene index。lucene index中有很多小segments,即為儲存的最小管理單元 為什麼要說明es和lucene之間的關係呢?因為es是在apache lucene的基礎...