18 | 波动的响应延迟:如何应对变慢的Redis?(上)

135 阅读2分钟

Redis 真的变慢了吗?

  • redis是业务系统中的一个环节,redis延时增加会导致业务一串连锁反应

    • 例如将redis和mysql放在一个事务中,导致mysql占据资源

  • 怎么看redis是不是真的变慢了

    • 查看redis延迟 环境原因很高

    • 基于当前环境下的 Redis 基线性能\

      • 基线即系统在低压力、无干扰下的基本性能

      • redis-cli 命令提供了–intrinsic-latency 选项,可以用来监测和统计测试期间内的最大延迟\

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

      • 用 iPerf 这样的工具,测量从 Redis 客户端到服务器端的网络延迟

如何应对 Redis 变慢?

  • 怎么诊断redis慢的原因

    • redis自身操作特性
    • 文件系统
    • 操作系统

\

Redis 自身操作特性的影响

  • 1.慢查询命令

    • 必须要知道 Redis 的不同命令的复杂度    redis官网 redis.io/commands/\

    • 可以通过 Redis 日志,或者是 latency monitor 工具,查询变慢的请求\

    • 针对慢查询命令

      • 用其他高效指令代替  不要使用 SMEMBERS 命令,而是要使用 SSCAN 多次迭代返回

      • 当你需要执行排序、交集、并集操作时,可以在客户端完成,而不要用 SORT、SUNION、SINTER 这些命令,以免拖慢 Redis 实例\

      • KEYS 命令一般不被建议用于生产环境中\

    • 提升硬件水平\

  • 2.过期 key 的自动删除机制

    • 默认情况下:Redis 每 100 毫秒会删除一些过期 key

      • 采样 ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP 个数的 key,并将其中过期的 key 全部删除\

      • 如果超过 25% 的 key 过期了,则重复删除的过程,直到过期 key 的比例降至 25% 以下\

        • 产生的原因:频繁使用相同的时间参数的EXPIREAT 命令设置过期 key
        • 解法:加上一个一定大小范围内的随机数
      • ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP默认是20\

    • 删除操作是阻塞的

总结

  • 检查redis是否变慢

    • 响应延迟
    • 基线性能
  • 排查慢的原因

    • 从慢指令开始排查
    • 排查过期时间,可以设置一下段随机时间(业务允许的情况下)

\