為什麼說Redis單執行緒效率高

2021-08-26 08:24:06 字數 816 閱讀 9802

redis效率高的主要原因有下面幾個:

redis採用的是基於記憶體的採用的是單程序單執行緒模型的 kv 資料庫,由c語言編寫,官方提供的資料是可以達到100000+的qps(每秒內查詢次數)。

這個資料不比採用單程序多執行緒的同樣基於記憶體的 kv 資料庫 memcached 差!

上圖是redis官方的測試資料,橫軸表示連線數,縱軸表示qps。

如果redis採用的是多執行緒,那麼cpu會在多個執行緒之間來回切換,在如此高的qps下,多個執行緒的切換時特別頻繁的,十分消耗cpu。

假設我們有三個連線同時執行下面的操作:

incr count
由於redis使用單執行緒來處理命令的,所以一條命令來了之後不會立即執行,而是將命令加到乙個佇列中,然後逐個被執行,這樣就能保證在不加鎖的情況下保證不會產生併發問題。

如果redis採用多執行緒執行命令,那麼對於三個連線同時執行incr操作的時候,就需要新增鎖來保證執行緒的安全性了,會大大降低執行效率。

redis採用非阻塞io,使用epoll作為io多路復用技術的實現,再加上redis自身的樹鹼處理模型將epoll中的連線、讀寫、關閉都轉為事件,不在網路io上浪費過多的事件。

當然了,單執行緒機制也不是萬能的,也會存在乙個的問題:對於每個命令的執行事件是有要求的。如果某個命令執行事件過長,會導致其他命令被阻塞,對於redis這種高效能的服務來說是致命的。

所以即使redis效能很高,我們也要合理的去使用redis,不合理的使用也會導致很多問題。

Redis單執行緒為什麼執行效率這麼高?

一 redis為什麼是單執行緒 注意 redis 單執行緒指的是網路請求模組使用了乙個執行緒,即乙個執行緒處理所有網路請求,其他模組仍用了多個執行緒。因為cpu不是redis的瓶頸。redis的瓶頸最有可能是機器記憶體或者網路頻寬,既然單執行緒容易實現,而且cpu不會成為瓶頸,那就順理成章地採用單執...

Redis為什麼是單執行緒

經過多方資料收集 總結 思考,結論如下 準確地來說,該問題是 為什麼redis採用單程序單執行緒模型 我們從兩個層次去理解 第乙個層次 我們多執行緒的使用情景是io密集型,目的是為了充分利用cpu資源。也就是說當乙個執行緒io等待的時候,另乙個執行緒可以進行執行,達到充分利用cpu資源的效果,不要讓...

Redis為什麼是單執行緒,高併發快

1.redis是基於記憶體的,記憶體的讀寫速度非常快 2.redis是單執行緒的,省去了很多上下文切換執行緒的時間 3.redis使用多路復用技術,可以處理併發的連線。非阻塞io 內部實現採用epoll,採用了epoll 自己實現的簡單的事件框架。epoll中的讀 寫 關閉 連線都轉化成了事件,然後...