1. 程式人生 > >redis為什麼是單執行緒設計,以及Redis為什麼快

redis為什麼是單執行緒設計,以及Redis為什麼快

1 redis快的原因

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

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

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

4、使用多路I/O複用模型,非阻塞IO;

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

2 redis 為什麼是單執行緒的

因為Redis是基於記憶體的操作,CPU不是Redis的瓶頸,Redis的瓶頸最有可能是機器記憶體的大小或者網路頻寬。既然單執行緒容易實現,而且CPU不會成為瓶頸,那就順理成章地採用單執行緒的方案了(畢竟採用多執行緒會有很多麻煩!,避免使用鎖)。
正是由於在單執行緒模式的情況下已經很快了,就沒有必要在使用多執行緒了!但是,我們使用單執行緒的方式是無法發揮多核CPU 效能,不過我們可以通過在單機開多個Redis 例項來完善!
警告:這裡我們一直在強調的單執行緒,只是在處理我們的網路請求的時候只有一個執行緒來處理,一個正式的Redis Server執行的時候肯定是不止一個執行緒的,這裡需要大家明確的注意一下!