为读取密集型应用程序配置 Redis

为读取密集型应用程序配置 Redis

即使升级到 elasticache m4.xlarge 后,Redis 连接仍然超时我们面临连接超时问题。我们的缓存大小几乎不到 1.5Gb。我们一直在使用 m4.large 实例,大约有 150-200 个与实例的连接。我们尝试添加两个只读副本,但仍然没有减少。我们尝试移动到集群,但不幸的是 redis ruby​​ 客户端不支持集群。该怎么办

答案1

Redis 的功能强大,但设计却有限制。它通过强大的操作和数据类型提供了出色的性能……但它的设计是单线程和单片的,这意味着无论您的机器有多少个核心,Redis 都只会使用一个。如果您的应用程序每秒需要的操作数超过单个 Redis 进程可以处理的范围,那么您唯一的选择就是在多个 Redis 进程/服务器之间分担负载。

Redis 集群自行处理了这个问题,通过牺牲一些关键功能(如流水线和多键操作)来内部分片负载,但需要兼容的客户端库。

标准 Redis 提供了两种扩展读取容量的方法,但这两种方法都需要在客户端付出一些努力:读取副本和在多个 Redis 主服务器之间进行数据分片(以及为每个主服务器分配读取副本)。在第一种情况下,您必须在所有副本之间平衡读取操作(许多客户端库都提供对此的原生支持)。在第二种情况下,您的应用程序负责数据分片过程,并通过在每次操作之前评估分布函数将流量发送到每个 Redis“集群”。

无论如何,使用 Redis 扩展读取容量并非易事。我希望所有这些选项都有助于澄清这一点。

相关内容