原创

redis大key

温馨提示:
本文最后更新于 2025年07月18日,已超过 329 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

大Key的查找指令

redis-cli --bigkeys

大key的判定

类型    大小
string5MB
list20000个
zset10000个
hash
1000个,value总大小100MB

大key带来的问题

  1. redis变慢
  2. redis内存不断变大引发OOM,或达到maxmemory设置引发写阻塞或重要Key被驱逐
  3. redis Cluster 中的某个node内存远超其他node,但因Redis Cluster的主句迁移最小粒度为key而无法将node上的内存均衡化
  4. 大key的读请求使Redis占用服务器全部带宽,自身变慢的同时影响到该服务器上的其他服务
  5. 删除一个大key造成主库较长时间的阻塞并引发同步中断或主从切换

大Key产生的原因

原因例子
将Redis用在并不适合其能力的场景,造成Key的value过大    使用String类型的Key存放法体积二进制文件类型数据
业务上线前规划设计考虑得不足。未对Key中的成员进行合理拆分   ,造成个别Key的成员数量过多
没有对无效数据进行清理。造成HASH类型的Key中的成员不断增加
预期外的访问量陡增突然出现的爆款商品、访问量暴涨的新闻热点、直播间某大主播高活动带来的大量刷屏点赞
使用LIST类型Key的业务消费 侧代码故障,造成对应Key的成员只增不减

大key的处理

处理方法
进行拆分将一个含有数万成员的HASH KEY拆分成多个HASH KEY,并确保每个key的成员数量在合理范围,在RedisCluster结构中,拆分大key可显著平衡node间的内存分配
进行清理将不适合Redis能力的数据存放至其他存储,并在Redis中删除此类数据。需要注意的是。Redis4.0后,使用UNLINK命令可以非阻塞的方式缓慢逐步清理传入的Key,可以安全的删除大Key甚至特大Key
监控Redis内存水位
设置Redis内存报警阈值提醒:如 Redis 内存使用率超过70%,Redis内存1小时内增长率超过20%等
定期清理失效数据HASH结构中,忽略时效性,导致产生大Key。可通过定时任务清理失效数据。HSCAN 配合 HDEL 在不阻塞的前提 下清理


  •   


正文到此结束