2014-01-23 40 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缓存。它包括主/从发现和拓扑更新。