聊一聊如何离线分析Redis缓存的空闲分布

开发 前端
对于设置了 LRU 相关策略的 Redis 实例才可以用这个方法去分析空闲分布,如果是 LFU 相关策略的,则无法看到空闲分布!!原因的话,object idletime 已经告诉我们了。

背景

我们在使用 Redis 的过程中,有时候会想要知道某些 key 是否长时间没有被访问,如果这些 key 长时间没有人访问,并且还占用了比较大的内存空间时,我们就会想及时的清理掉这些 key。

Redis 本身提供了一个 OBJECT IDLETIME 的命令可以让我们来查询某个 key 最后一次被访问后的秒数。

https://redis.io/commands/object-idletime/

但是这个命令对于分析整个 Redis 实例时会显得十分吃力,免不了 scan + object idletime 的组合。

如果能把这个时间从 rdb 文件读出来再进行分析,可以有效减少对线上实例的影响,同时效率也会高不少。

下面来看看如何做到的。

RDB 说明

关键操作符

16进制

10进制

简称

说明

0xF8

248

IDLE

标识LRU的空闲时间

0xF9

249

FREQ

标识LFU的访问频率

其中 248 和 249 两个是只会存在一个,但是它们又用的同一个数据结构,所以要把它们放在一起来说明。

下面再看看一个 key value 完整的“数据结构”

252 EXPIRE_TIME_MS|253 EXPIRE_TIME|249 LFU 或 248 LRU|xxx VALUE_TYPE|xxx KEY|xxx VALUE|

可以看到第三部分就是我们所需要的。

rdb-cli 分析

rdb-cli 是老黄写的一个开源 rdb 文件分析器,源码地址:https://github.com/catcherwong/rdb-tools,感兴趣的可以关注一下。

rdb-cli 里面有两个命令用于做这一块的分析。

首先是

rdb-cli memory \
    -ot html \
    --sep-count 3 \
    /tmp/biz_a_20240301.rdb

执行这个之后,会生成一个 res.html 文件,打开这个文件会看到下面两个图:

图片图片

这两个图就是所有 key 的空闲分布,可以看到,就数量而言,这个 redis 实例,有超过 100w 的 key 是在 7天内没有过访问的!!

有这个大致分布,但是还看不到具体的细节,所以我们要用另外一个命令来看具体是那些 key 这么离谱。

rdb-cli csv \
    --min-idle 604800 \
    /tmp/biz_a_20240301.rdb

执行这个之后,会生成一个 dump.csv 文件,打开这个文件可以看到下面的内容:

图片图片

着重看 idle 这一列,单位是秒。

可以看到超过 7天 没访问的,最长的有 16693102 秒,换算成天,是 193 天,接近 200 天。这种数据就不应该存在 redis 里面!

两个命令,用起来还算是比较方便的,也比较快得到结果,当然上述两个命令还有其他的过滤条件可以结合使用,用 -h 即可查看。

小结

对于设置了 LRU 相关策略的 Redis 实例才可以用这个方法去分析空闲分布,如果是 LFU 相关策略的,则无法看到空闲分布!!

原因的话,object idletime 已经告诉我们了。

责任编辑:武晓燕 来源: 不才老黄
相关推荐

2018-04-25 09:01:02

2022-03-08 16:10:38

Redis事务机制

2022-05-12 23:19:15

Redis内存碎片处理

2020-01-17 09:07:14

分布式系统网络

2019-12-13 10:50:49

集群Redis存储

2023-03-06 21:23:23

Redis数据库

2023-03-05 18:40:39

iptables防火墙软件

2022-05-18 16:35:43

Redis内存运维

2021-08-11 09:37:11

Redis持久化磁盘

2018-05-16 08:58:04

用户画像存储

2020-12-29 05:33:40

TomcatSpringBoot代码

2023-07-06 13:56:14

微软Skype

2020-09-08 06:54:29

Java Gradle语言

2020-01-07 08:31:52

代码分层Web

2018-11-30 12:48:36

SDS故障硬件

2021-01-28 22:31:33

分组密码算法

2023-09-22 17:36:37

2020-05-22 08:16:07

PONGPONXG-PON

2021-08-01 09:55:57

Netty时间轮中间件

2024-10-28 21:02:36

消息框应用程序
点赞
收藏

51CTO技术栈公众号