Redis是單執行緒,為什麼這麼快?

2021-09-19 07:30:46 字數 874 閱讀 5190

為什麼這麼快,簡單說法: 

1.redis是基於記憶體的,記憶體的讀寫速度非常快;

2.redis是單執行緒的,省去了很多上下文切換執行緒的時間;

3.redis使用多路復用技術,可以處理併發的連線;

較詳細的解釋:

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

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

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

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

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

多路 i/o 復用模型:

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

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

Redis為什麼是單執行緒還這麼快

1 redis是基於記憶體的操作,cpu不是redis的瓶頸,redis的瓶頸最有可能是機器記憶體的大小或者網路頻寬 2 採用單執行緒,避免了不必要的上下文切換和競爭條件,也不存在多程序或者多執行緒導致的切換而消耗 cpu 3 採用網路io多路復用技術來保證在多連線的時候,系統的高吞吐量。多路 指的...

單執行緒的 Redis 為什麼這麼快

redis採用的是基於記憶體的 單程序單執行緒模型的kv資料庫,由c語言編寫。官方提供的資料是可以達到1000000 的qps 每秒內查詢次數 這個資料不比採用單程序多執行緒的同樣基於記憶體的kv資料庫memcached查。為了更好的回答和理解redis為什麼有這好的效能,我們從以下兩個問題來解答 ...

redis是單執行緒的為什麼速度這麼快?

redis是基於記憶體的也可以持久化的日誌型 key value資料庫,是單執行緒的。由於redis是基於記憶體進行讀寫的,所以他的io瓶頸並不在磁碟上 記憶體的速度非常快。redis是key value型資料庫,相比於關係型資料庫效率更高,時間複雜度為o 1 redis的使用場景為連線非常多但每個...