2014-01-23 98 views
17

我在環顧Redis,爲我提供了一箇中間高速緩存存儲器,其中包含許多關於交集和聯合的設置操作的計算。多核CPU上的Redis性能

我看了一下redis網站,發現redis不是爲多核CPU設計的。我的問題是,爲什麼如此?

另外,如果是的話,我們如何在多核CPU上利用redis來100%利用CPU資源。

回答

25

我看了一下redis網站,發現redis不是爲多核CPU設計的。我的問題是,爲什麼如此?

這是一個設計決定。無限期在I/O的併發方面

Redis的是單線程與epoll的/ kqueue的和體重秤。 - @ antirez(Redis的的創建者)

一種用於選擇一個事件驅動方式的原因是,同步線程之間正值在兩個軟件(代碼複雜度)成本和硬件級(上下文交換)。再加上Redis的瓶頸通常是網絡,而不是CPU。另一方面,單線程體系結構有其自身的好處(例如保證原子性)。

因此事件循環看起來像Redis的efficient & scalable系統的良好設計。

另外,如果是,怎樣才能使CPU資源的100%的利用率與多核CPU的 Redis的。

Redis的方式進行調整在多個內核是sharding,大多與Twemproxy在一起。

但是,如果由於某種原因您仍想使用多線程方法,請查看Thredis,但請確保您瞭解其作者所做的操作(例如,您不能將其用作複製主機,例如)。

+0

這真的很有趣。我正在研究如何使用redis而不需要持久性,並且使用大量的CPU密集設置操作,而不是使用更多的緩存。考慮到設計的影響,是否會有相同的使用thredis的缺點? –

+0

只是想增加另一個原因redis是單核心的理由:1:對於許多redis工作負載,系統內存帶寬可能會在CPU之前造成瓶頸。它是一個超高效的數據結構服務器。 2:單線程架構使得Redis更容易確保所有操作都是原子操作。 –

+0

@LoveHasija請參閱https://github.com/grisha/thredis/blob/master/README-THREDIS#L30 – Agis

2

Redis服務器是單線程的。但它允許使用Redis節點(主設備和/或從設備)實現100%的CPU資源利用率。

  1. 閱讀操作可以使用Redis主/從配置與單主控進行縮放。一個用於主節點的CPU內核和一個用於從節點的CPU內核。

  2. 寫操作可以使用Redis多主集羣配置進行擴展。主節點使用多個CPU內核,從節點使用多個CPU內核。

Redisson - 基於Redis的Java框架提供了對Redis集羣的全面支持。適用於AWS Elasticache和Azure Redis緩存。它包括主/從發現和拓撲更新。