redis大key问题

原创
2022/10/28 11:15
阅读数 59

什么是大key

redis是key-value映射结构的,一般来说,key设置好大小是固定的,那么只有不断的增大的是value。value很大的映射的是key就是大key。

redis大key影响

  • 执行大key命令的客户端本身,耗时明显增加,甚至超时
  • 执行大key相关读取或者删除操作时,会严重占用带宽和CPU,影响其他客户端
  • 大key本身的存储带来分布式系统中分片数据不平衡,CPU使用率也不平衡
  • 大key有时候也是热key,读取操作频繁,影响面会很大
  • 执行大key删除时,在低版本redis中可能阻塞线程

这样看来大key的影响还是很明显的,最典型的就是阻塞线程,并发量下降,导致客户端超时,服务端业务成功率下降。

大key问题处理

1. 查找大key

  • ./redis-cli --bigkeys

  • redis-rdb-tools

2. 处理方法

根据大key的实际用途可以分为两种情况:可删除和不可删除。

  • 可删除,惰性删除大key 在数据不丢失的情况下,可以选择惰性删除大key
  1. 当Redis版本大于4.0时,可使用UNLINK命令安全地删除大Key,该命令能够以非阻塞的方式,逐步地清理传入的Key。
  2. 当Redis版本小于4.0时,避免使用阻塞式命令KEYS,而是建议通过SCAN命令执行增量迭代扫描key,然后判断进行删除。
  • 不可删除,压缩和拆分key
  1. 当vaule是string时,比较难拆分,则使用序列化、压缩算法将key的大小控制在合理范围内,但是序列化和反序列化都会带来更多时间上的消耗。

  2. 当value是string,压缩之后仍然是大key,则需要进行拆分,一个大key分为不同的部分,记录每个部分的key,使用multiget等操作实现事务读取。

  3. 当value是list/set等集合类型时,根据预估的数据规模来进行分片,不同的元素计算后分到不同的片。

参考: https://blog.csdn.net/wejack/article/details/120456298

https://mp.weixin.qq.com/s/nC0QeLTYxHmCu6TUfWv3ug

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部