替你踩过Redis缓存的坑,奉上使用规范和监控方法( 三 )


推荐使用O(1)命令 , 如get scard等 。
O(N)命令关注N的数量 , 如下命令需要对N值在业务层面做控制 。

  • hgetall
  • lrange
  • smembers
  • zrange
例如:smember命令时间复杂度为O(n) , 当n持续增加时 , 会导致 Redis CPU 持续飙高 , 阻塞其他命令的执行 。
5、Pipeline使用
说明:Pipeline是Redis批量提交的一种方式,也就是把多个命令操作建立一次连接发给Redis去执行,会比循环的单次提交性能更优 。
Redis客户端执行一条命令分4个过程:发送命令 -> 命令排队 ->命令执行 -> 返回结果 。
替你踩过Redis缓存的坑,奉上使用规范和监控方法文章插图
常用的mget、mset命令 , 有效节约RTT(命令执行往返时间) , 但hgetall并没有mhgetall , 是不支持批量操作的 。 此时 , 需要使用Pipeline命令
替你踩过Redis缓存的坑,奉上使用规范和监控方法文章插图
例如:直播中台项目中 , 需要同时查询主播日、周、月排行榜 , 使用PIPELINE一次提交多个命令 , 同时返回三个榜单数据 。
6、线上禁用命令
  • 禁止使用Monitor
    禁止生产环境使用monitor命令 , monitor命令在高并发条件下 , 会存在内存暴增和影响Redis性能的隐患
  • 禁止使用Keys
    keys操作是遍历所有的key , 如果key非常多的情况下导致慢查询 , 会阻塞其他命令 。 所以禁止使用keys及keys pattern命令 。
    建议线上使用scan命令代替keys命令 。
  • 禁止使用Flushall、Flushdb
    删除Redis中所有数据库中的所有记录 , 并且该命令是原子性的 , 不会终止执行 , 一旦执行 , 将不会执行失败 。
  • 禁止使用Save
    阻塞当前redis服务器 , 直到持久化操作完成为止 , 对于内存较大的实例会造成长时间的阻塞
  • BGREWRITEAOF
    手动AOF , 手动持久化对于内存较大的实例会造成长时间的阻塞
  • Config
    Config是客户端配置方式 , 不利于Redis运维 。 建议在Redis配置文件中设置 。
六、Redis监控
1、慢查询
方法一:slowlog获取慢查询日志
127.0.0.1:{port}> slowlog get 5
1) 1) (integer) 47
2) (integer) 1533810300
3) (integer) 175833
4) 1) "DEL"
2) "spring:session:expirations:1533810300000"2) 1) (integer) 46
2) (integer) 1533810300
3) (integer) 117400
4) 1) "SMEMBERS"
方法二:更全面的慢查询可以通过CacheCloud工具监控 。
路径:"应用列表"-点击相关应用名-点击"慢查询"Tab页 。
点击"慢查询" , 重点关注慢查询个数及相关命令 。
2、监控Redis实例绑定的CPU核心使用率
由于Redis是单线程 , 重点监控Redis实例绑定的CPU核心使用率 。
一般CPU资源使用率为10%左右 , 如果使用率高于20%时 , 考虑是否使用了RDB持久化 。
3、Redis分片负载均衡
当前redis-cluster架构模式 , 3个master和3个Slave组成的集群 , 关注 Redis-cluster每个分片requests流量均衡情况;
通过命令获取:
redis-cli -p{port} -h{host} --stat
一般情况 , 超过12W需要告警 。
4、关注大key BigKey
通过Redis提供的工具 , redis-cli定时扫描相应Redis大Key , 进行优化 。
具体命令如下:
redis-cli -h 127.0.0.1 -p {port} --bigkeys或
redis-memory-for-key -s {IP} -p {port} XXX_KEY一般超过10K为大key , 需要重点关注 , 建议从业务层面优化 。
5、监控Redis占用内存大小
Info memory 命令查看 , 避免在高并发场景下 , 由于分配的MaxMemory被耗尽 , 带来的性能问题 。
重点关注 used_memory_human 配置项对应的value值 , 增量过高时 , 需要重点评估 。
七、总结
结合具体业务特性 , 合理评估Redis所需内存容量、选择数据类型、设置单key大小 , 才能更好地服务于业务 , 为业务提供高性能的保障 。
作者丨Jessica Chen
来源丨vivo互联网技术(ID:vivoVMIC)
dbaplus社群欢迎广大技术人员投稿 , 投稿邮箱:editor@dbaplus.cn