关于Redis的键值设计和一些问题
键值设计约定
- 基本格式:[业务名称]:[数据名]:[id] 例如:login:user:123456
- 长度不超过44字节
- 不包含特殊字符
Bigkey问题
对于单个key来说,value > 10kb则看作是Bigkey;对于集合key来说,元素数量 > 1000则看作是Bigkey。危害
对Bigkey执行读请求时,少量的QPS就可能导致带宽使用率被占满,导致Redis实例乃至物理机变慢网络阻塞
Bigkey所在的Redis实例内存使用率远超其他实例,无法使数据分片的内存资源达到均衡数据倾斜
对元素较多的hash、list、zset等数据结构执行操作时耗时较久,可能导致主进程阻塞Redis阻塞
对Bigkey的数据序列化和反序列化会导致CPU使用率飙升,影响redis实例和本机其他应用CPU压力
发现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条慢查询命令
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 精神内猫!






