多核 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 性能的主要内容,如果未能解决你的问题,请参考以下文章