我在環顧Redis,爲我提供了一箇中間高速緩存存儲器,其中包含許多關於交集和聯合的設置操作的計算。多核CPU上的Redis性能
我看了一下redis網站,發現redis不是爲多核CPU設計的。我的問題是,爲什麼如此?
另外,如果是的話,我們如何在多核CPU上利用redis來100%利用CPU資源。
我在環顧Redis,爲我提供了一箇中間高速緩存存儲器,其中包含許多關於交集和聯合的設置操作的計算。多核CPU上的Redis性能
我看了一下redis網站,發現redis不是爲多核CPU設計的。我的問題是,爲什麼如此?
另外,如果是的話,我們如何在多核CPU上利用redis來100%利用CPU資源。
我看了一下redis網站,發現redis不是爲多核CPU設計的。我的問題是,爲什麼如此?
這是一個設計決定。無限期在I/O的併發方面
Redis的是單線程與epoll的/ kqueue的和體重秤。 - @ antirez(Redis的的創建者)
一種用於選擇一個事件驅動方式的原因是,同步線程之間正值在兩個軟件(代碼複雜度)成本和硬件級(上下文交換)。再加上Redis的瓶頸通常是網絡,而不是CPU。另一方面,單線程體系結構有其自身的好處(例如保證原子性)。
因此事件循環看起來像Redis的efficient & scalable系統的良好設計。
另外,如果是,怎樣才能使CPU資源的100%的利用率與多核CPU的 Redis的。
Redis的方式進行調整在多個內核是sharding,大多與Twemproxy在一起。
但是,如果由於某種原因您仍想使用多線程方法,請查看Thredis,但請確保您瞭解其作者所做的操作(例如,您不能將其用作複製主機,例如)。
Redis服務器是單線程的。但它允許使用Redis節點(主設備和/或從設備)實現100%的CPU資源利用率。
閱讀操作可以使用Redis主/從配置與單主控進行縮放。一個用於主節點的CPU內核和一個用於從節點的CPU內核。
寫操作可以使用Redis多主集羣配置進行擴展。主節點使用多個CPU內核,從節點使用多個CPU內核。
Redisson - 基於Redis的Java框架提供了對Redis集羣的全面支持。適用於AWS Elasticache和Azure Redis緩存。它包括主/從發現和拓撲更新。
這真的很有趣。我正在研究如何使用redis而不需要持久性,並且使用大量的CPU密集設置操作,而不是使用更多的緩存。考慮到設計的影響,是否會有相同的使用thredis的缺點? –
只是想增加另一個原因redis是單核心的理由:1:對於許多redis工作負載,系統內存帶寬可能會在CPU之前造成瓶頸。它是一個超高效的數據結構服務器。 2:單線程架構使得Redis更容易確保所有操作都是原子操作。 –
@LoveHasija請參閱https://github.com/grisha/thredis/blob/master/README-THREDIS#L30 – Agis