键值设计约定

  • 基本格式:[业务名称]:[数据名]:[id] 例如:login:user:123456
  • 长度不超过44字节
  • 不包含特殊字符

    Bigkey问题

    对于单个key来说,value > 10kb则看作是Bigkey;对于集合key来说,元素数量 > 1000则看作是Bigkey。

    危害

    网络阻塞

    对Bigkey执行读请求时,少量的QPS就可能导致带宽使用率被占满,导致Redis实例乃至物理机变慢

    数据倾斜

    Bigkey所在的Redis实例内存使用率远超其他实例,无法使数据分片的内存资源达到均衡

    Redis阻塞

    对元素较多的hash、list、zset等数据结构执行操作时耗时较久,可能导致主进程阻塞

    CPU压力

    对Bigkey的数据序列化和反序列化会导致CPU使用率飙升,影响redis实例和本机其他应用

    发现Bigkey

  • redis-cli —bigkeys命令:查看Redis实例中Bigkey
  • scan扫描
    利用scan扫描Redis中所有Key,利用strlen、hlen等命令判断key的长度(不建议使用 MEMORY USAGE)
  • 第三方工具,如Redis-Rdb-Tools分析RDB快照
  • 网络监控,监控进出Redis的网络数据,超出预警主动警告

    Bigkey的删除

  • redis3.0及以下版本
    遍历Bigkey元素,先逐个删除,最后删除Bigkey本身
  • redis4.0以后
    unlink命令

    慢查询问题

    若redis中存储的数据量过大,且不合理的使用了某些命令(比如keys *),会导致redis执行速度很慢。由于redis是单线程的,所以慢查询会导致其他命令的执行速度受到影响。

    慢查询处理

    发现慢查询

    slowlog get [n] 命令,获取最新的n条慢查询命令