Redis big key
# 一、简单介绍
- bigkey 是指 key 对应的 value 所占的内存空间比较大,即 value 本身较大或是其元素个数较多;
- 按照数据结构细分的话,一般分为字符串类型 bigkey 和非字符串类型 bigkey ;
- 字符串类型:体现在单个 value 值很大,一般认为超过 10KB 就是 bigkey;
- 非字符串类型:哈希、列表、集合、有序集合,体现在子元素个数过多;
# 二、产生的影响
- 内存空间不均匀,对于 Redis 的分布式部署,bigkey 可能会造成节点的内存空间使用不均匀;
- 超时阻塞,Redis 是单线程运行的,操作 bigkey 耗时变长时会阻塞整个 Redis;
- 网络拥塞:每次获取 bigkey,以及在主从复制与备份时,都会产生较大的网络流量;
- 如果 bigkey 刚好是热点 key,那么将会产生较大的隐患,这种情况应该尽量避免;
# 三、如何发现
- 主动定期检查,使用scan命令渐进的扫描出所有的key,执行 debug object key 查看 key 的大小,判断是否为 bigkey;
- 被动检测报警,在客户端实际使用过程中,可以对 key 进行检测,判断是否为 bigkey 以及是否会引起阻塞,并添加报警;
- 执行
redis-cli -h host -p port --bigkeys
查询 bigkey 的情况,示例如下:
# 四、如何删除
- 对于字符串类型的 bigkey 可以直接 del,一般不会产生阻塞;
- 对于非字符串类型的 bigkey,可以先逐步删除其子元素,最后执行 del 操作;
编辑 (opens new window)
上次更新: 2024/06/28, 11:37:53