23

我正在寻找 redis 为我提供一个中间缓存存储,其中包含大量围绕交叉和联合等集合操作的计算。

我查看了redis网站,发现redis不是为多核CPU设计的。我的问题是,为什么会这样?

另外,如果是的话,我们如何在多核 CPU 上使用 redis 来 100% 地利用 CPU 资源。

4

2 回答 2

35

我查看了redis网站,发现redis不是为多核CPU设计的。我的问题是,为什么会这样?

这是一个设计决策。

Redis 是带有 epoll/kqueue 的单线程,并且在 I/O 并发方面可以无限​​扩展。--@antirez(Redis 的创建者)

选择事件驱动方法的一个原因是线程之间的同步在软件(代码复杂性)和硬件级别(上下文切换)方面都是有代价的。此外,Redis 的瓶颈通常是网络,而不是 CPU。另一方面,单线程架构有其自身的好处(例如保证原子性)。

因此,对于像 Redis 这样的高效可扩展的系统来说,事件循环似乎是一个很好的设计。

另外,如果是的话,我们如何在多核 CPU 上使用 redis 来 100% 地利用 CPU 资源。

Redis 扩展多核的方法是分片,主要与Twemproxy一起使用。

但是,如果由于某种原因您仍想使用多线程方法,请查看Thredis,但请确保您了解其作者所做的事情的含义(例如,您不能将其用作复制主机)。

于 2014-01-23T10:11:58.067 回答
2

Redis 服务器是单线程的。但它允许使用 Redis 节点(主节点和/或从节点)实现 100% 的 CPU 资源利用率。

  1. 读取操作可以使用 Redis 主/从配置和单主来扩展。CPU 内核之一用于主节点,所有其他 CPU 内核用于从节点。

  2. 可以使用 Redis 多主集群配置来扩展写操作。多个 CPU 内核用于主节点,所有其他 CPU 内核用于从属节点。

Redisson - Redis Java 客户端,提供对 Redis 集群的全面支持。适用于 AWS Elasticache 和 Azure Redis 缓存。它包括主/从发现和拓扑更新。

于 2016-09-27T15:14:47.413 回答