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

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

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

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

【问题讨论】:

    标签: redis cpu cpu-usage jedis


    【解决方案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 资源利用率。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-14
      • 1970-01-01
      • 2013-06-08
      • 2021-02-26
      • 1970-01-01
      • 2023-03-26
      • 2017-01-04
      相关资源
      最近更新 更多