redis的大Key问题

所谓的大 key 问题是某个 key value 比较大,所以本质上是大 value 问题。大 Key 问题的坏处最典型的就是阻塞线程,并发量下降,导致客户端超时,服务端业务成功率下降。

快速找出大Key

下面列出常用的两种,其实最方便的是通过第三方工具去监控
1.redis-cli --bigkeys 命令
该命令可以列出 Redis 中大小最大的 key 。这个命令只在 Redis 4.0 或更高版本中可用。
2.Redis 内置命令对目标 Key 进行分析
  • STRING类型:执行STRLEN命令,返回对应Keyvalue的字节数。
  • LIST类型:执行LLEN命令,返回对应Key的列表长度。
  • HASH类型:执行HLEN命令,返回对应Key的成员数量。
  • SET类型:执行SCARD命令,返回对应Key的成员数量。
  • ZSET类型:执行ZCARD命令,返回对应Key的成员数量。
  • STREAM类型:执行XLEN命令,返回对应Key的成员数量。

优化大Key 

12306 项目为了避免大 K 问题,对 Username Redis Set 结构进行分片。因此,我 Set 结构进行 分片,根据用户名的 HashCode 进行取模操作,将数据分散存储在 1024 Set 结构中 ,从而有效地解决了这个问题。
  • 分割大 key:将大 key 拆分成多个小 key 来存储数据。例如,如果一个大型哈希表存储了大量的数据,可以将它拆分成多个小的哈希表,每个哈希表存储一部分数据。这样可以降低每个 key 的大小,并使 Redis 更加稳定和高效。
  • 使用适当的数据结构:选择适当的 Redis 数据结构,以减少单个 key 的大小。例如,如果要存储大量元素,应该使用 Redis 集合或有序集合,而不是使用列表。
  • 定期清理数据:定期清理 Redis 中的过期数据和不必要的数据,以避免大 key 的大小增长。可以使用 Redis 内置的过期机制或手动清理不必要的数据。
  • 压缩数据:使用 Redis 的数据压缩功能,将大 key 中的数据进行压缩,可以减少每个 key 的大小,从而提高 Redis 的性能和可用性。
  • 按需加载数据:不要在一次性将整个大 key 加载到内存中,而是按需加载数据,可以降低 Redis的内存使用率,从而提高性能。
  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值