Redis 大键

大键概述

在 Redis 中,大键消耗过多的内存资源,这会影响 Redis 的性能和可用性。

一般来说,以下情况可能导致一个键被认为是大键:

  • 对于字符串类型的键,如果分配的内存超过 5 MB。
  • 对于列表类型的键,如果元素数量超过 20,000,或分配的内存超过 1 MB。
  • 对于集合类型的键,如果元素数量超过 5,000,或分配的内存超过 1 MB。
  • 对于有序集合类型的键,如果元素数量超过 10,000,或分配的内存超过 1 MB。
  • 对于哈希类型的键,如果字段数量超过 1,000,或分配的内存超过 1 MB。

注意:这些阈值并不是固定的规则,应根据您的实际情况判断一个键是否符合大键的标准。

如何识别 Redis 实例中的大键?

使用以下命令抽样并检查 Redis 中的键,以识别那些占用大量内存的键及其类型和大小。

redis-cli --bigkeys

有关检测大键的更详细方法,请参考

如何修复 Redis 实例中的大键?

大键类型修复方法
字符串考虑将大键拆分为多个小字符串进行存储。使用 GETRANGESETRANGE 命令读取和修改字符串的部分内容,从而将一个大字符串拆分为几个小字符串。
哈希将大键拆分为几个小哈希。首先,将大哈希的键集分割为若干部分,然后将每个键所对应的哈希的字段集进行拆分,最后将每个字段所对应的值进行分割。这样,一个大哈希可以被分割成几个小哈希。
列表考虑将大键拆分为多个小列表进行存储。使用 LRANGERPUSH 命令读取和修改列表的部分内容,从而将一个大列表分割为几个小列表。
集合考虑将大键拆分为多个小集合进行存储。使用 SMEMBERSSADD 命令读取和修改集合中的元素,从而将一个大集合分割为几个小集合。
有序集合将大键拆分为几个小有序集合。首先,对大有序集合的键集进行分区,然后将每个键所对应的有序集合的元素进行拆分。使用 ZRANGEZADD 命令读取和修改有序集合中的元素,从而将一个大有序集合拆分为几个小有序集合。