多核 CPU 上的 Redis 性能

Posted

技术标签:

【中文标题】多核 CPU 上的 Redis 性能【英文标题】:Redis performance on a multi core CPU 【发布时间】:2014-02-13 19:27:18 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

这是一个设计决定。

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

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

因此,对于像 Redis 这样的 efficient & scalable 系统来说,事件循环似乎是一个不错的设计。

另外,如果是,我们怎样才能使 CPU 资源的利用率达到 100% redis 在多核 CPU 上。

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

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

【讨论】:

这真的很有趣。我正在考虑在没有持久性的情况下使用 redis,并且与更多的缓存相比,使用繁重的 CPU 密集型设置操作。考虑到设计含义,使用 thredis 是否有任何缺点。 只是想补充几个原因 redis 是单核是有道理的: 1:对于许多 redis 工作负载,系统内存带宽可能会在 CPU 之前造成瓶颈。它是一个超级高效的数据结构服务器。 2:事件单线程架构让redis更容易保证所有操作都是原子的。【参考方案2】:

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

    可以使用 Redis 主/从配置和单主服务器来扩展读取操作。一个用于主节点的 CPU 内核,所有其他的用于从属节点。

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

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

【讨论】:

以上是关于多核 CPU 上的 Redis 性能的主要内容,如果未能解决你的问题,请参考以下文章

国产CPU性能测试:多核华为排第一,单核兆芯排第一

请问多核CPU还需要超线程技术吗?还有多核CPU的带宽怎样计算?

多核CPU的主频如何计算?

单核和多核,单进程和多进程,单线程与多线程

如何获取多核,多cpu系统中指定cpu的序列号

多核cpu的频率怎么算?