Skip to main content

如何发现缓存中的大Key?

作者:程序员马丁

在线博客:https://open8gu.com

note

大话面试,技术同学面试必备的八股文小册,以精彩回答应对深度问题,助力你在面试中拿个offer。

回答话术

通常来说,如果一个 Key 本身特别大(超过 5M 的字符串),或者它包含特别多的元素(超过 2w 长度的 List),那么这个 Key 就可以认为是一个大 Key。大 Key 会占用更多的内存,会在请求时占用更多的带宽,阻塞 Redis 的主线程,在集群环境中还会造成数据倾斜。

我们可以通过以下几种方式去发现大 Key:

1. 自行统计

Redis 基本每种数据类型都提供了获取大小的指令,比如,可以通过 STRLEN 得到字符串的长度,或者通过 HLEN等到哈希表的大小等等,结合使用批量扫描命令如 SCAN,可以自行统计各种数据结构在 Redis 中所占用的内存大小。

这种方法的优点是成本较低,但可能对性能产生一定影响,而且需要额外的开发工作。

2. 使用 bigkeys 命令

Redis 内置了 bigkeys 命令 ,通过该命令可以获取 Redis 的整体统计信息,并获取当前每种数据类型中最大的 Key。

这种方法的优点是不需要额外成本,因为 Redis 已经内置了这个命令。但缺点是它只能提供每种数据类型中的最大键,提供的信息有限,不够实用。

3. 使用 redis-rdb-tools

可以使用 redis-rdb-tools 或其他工具对 Redis 生成的 RDB 文件进行分析,从而得到 Redis 的整体统计信息。

这种方法的优点是由于是离线分析,对性能没有影响,而且提供的数据相对更全面。不过缺点是缺乏实时性。