Redis 十二 Redis為什麼是單執行緒的?

2022-01-12 13:32:06 字數 977 閱讀 9147

一、redis為什麼是單執行緒的?

1.redis在記憶體中執行,cpu不是效能瓶頸。

快:基於記憶體,避免磁碟i/o操作;採用key-value儲存,資料操作時間複雜度為o(1);

多執行緒技術是為了充分利用cpu,但是redis吞吐量很大,1s能處理106個請求。所有redis操作都只在記憶體中完成,不會涉及任何i/o操作,速度夠快。多執行緒上下文切換也要開銷,頻繁的對執行緒的上下文進行切換可能還會導致效能地急劇下降。

2.使用單執行緒也能併發處理客戶端的請求

使用i/o多路復用機制併發處理來自客戶端的多個連線,同時等待多個連線傳送的請求。

在 i/o 多路復用模型中,最重要的函式呼叫就是select以及類似函式,該方法的能夠同時監控多個檔案描述符(也就是客戶端的連線)的可讀可寫情況,當其中的某些檔案描述符可讀或者可寫時,select方法就會返回可讀以及可寫的檔案描述符個數。

3.可維護性

多執行緒就是引入併發控制來保證多個執行緒同時訪問資料時程式行為的正確性,需要打工人額外維護併發控制的相關**,例如併發讀寫的變數上增加互斥鎖等,一旦忘記獲取鎖或者忘記釋放鎖就可能會導致各種詭異的問題,管理相關的併發控制機制也需要付出額外的研發成本和負擔。

二、為什麼redis4.0後的版本引入多執行緒支援?

在 redis 4.0 之後的版本,情況就有了一些變動,新版的 redis 服務在執行一些命令時就會使用 主處理執行緒 之外的其他執行緒,例如 unlink、flushall async、flushdb async 等非阻塞的刪除操作。

對於刪除操作,如果鍵值對所占用的記憶體空間較小,單執行緒同步刪除損耗也不會太大,如果鍵值對占用的記憶體空間較大,幾十兆的檔案,毫秒內是無法刪除的,且釋放記憶體也會有時間消耗,這些操作會阻塞其它操作,但是這些刪除釋放操作對其它操作並沒有任何影響,所以可以非同步執行,通過多執行緒非阻塞的釋放記憶體空間,提高執行效率。

簡言之,一切為了效能。

什麼是redis,為什麼要學習redis

分布式系統 nosql資料庫 redis的定義 redis對比mysql 分布式系統 distributed system 由多台計算機和通訊的軟體元件通過計算機網路連線 本地網路或廣域網 組成。分布式系統是建立在網路之上的軟體系統。正是因為軟體的特性,所以分布式系統具有高度的內聚性和透明性。因此,...

為什麼使用Redis

為什麼使用redis 絕大部分寫業務的程式設計師,在實際開發中使用 redis 的時候,只會 set value 和 get value 兩個操作,對 redis 整體缺乏乙個認知。這裡對 redis 常見問題做乙個總結,解決大家的知識盲點。1 為什麼使用 redis 在專案中使用 redis,主要...

redis為什麼快

如果我們執行的伺服器是多核伺服器,為了充分利用多核優勢我們可以在單台伺服器起多個 redis 服務,或者架設 主從複製 哨兵模式 集群模式等多機方案。redis 服務執行時只是處理客戶端請求是單程序單執行緒的,但是服務執行時會有其他程序或執行緒處理其他的事,比如rdb的檔案的生成就會在子程序中進行等...