波动的响应延迟:如何应对变慢的Redis

86 阅读2分钟

如何判断 Redis 是不是真的变慢了:

一个最直接的方法,就是查看 Redis 的响应延迟。当你发现 Redis 命令的执行时间突然就增长到了几秒,基本就可以认定 Redis 变慢了。

第二个方法,也就是基于当前环境下的 Redis 基线性能做判断。所谓的基线性能呢,也就是一个系统在低压力、无干扰下的基本性能,这个性能只由当前的软硬件配置决定。

基线性能查看,该命令会打印 120 秒内监测到的最大延迟。

./redis-cli --intrinsic-latency 120

如果你观察到的 Redis 运行时延迟是其基线性能的 2 倍及以上,就可以认定 Redis 变慢了。

Redis 自身的操作特性、文件系统和操作系统,它们是影响 Redis 性能的三大要素。

Redis 自身的操作特性

两种排查和解决 Redis 变慢这个问题的方法:

  1. 从慢查询命令开始排查,并且根据业务需求替换慢查询命令;
  2. 排查过期 key 的时间设置,并根据实际使用需求,设置不同的过期时间。

当你发现 Redis 性能变慢时,可以通过 Redis 日志,或者是 latency monitor 工具,查询变慢的请求,根据请求对应的具体命令以及官方文档,确认下是否采用了复杂度高的慢查询命令。

如果的确有大量的慢查询命令,有两种处理方式:

  1. 用其他高效命令代替。
  2. 当你需要执行排序、交集、并集操作时,可以在客户端完成,而不要用 SORT、SUNION、SINTER 这些命令,以免拖慢 Redis 实例。
  3. KEYS 命令一般不被建议用于生产环境中。

默认情况下,Redis 每 100 毫秒会删除一些过期 key,具体的算法如下:

  1. 采样 ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP 个数的 key,并将其中过期的 key 全部删除;
  2. 如果超过 25% 的 key 过期了,则重复删除的过程,直到过期 key 的比例降至 25% 以下。

检查业务代码在使用 EXPIREAT 命令设置 key 过期时间时,是否使用了相同的 UNIX 时间戳,有没有使用 EXPIRE 命令给批量的 key 设置相同的过期秒数。因为,这都会造成大量 key 在同一时间过期,导致性能变慢。


此文章为8月Day13学习笔记,内容来源于极客时间《redis核心技术与实战》