当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2024-04-08 17:17:53 99观看
导读背景我们在使用 Redis 的过程中,有时候会想要知道某些 key 是否长时间没有被访问,如果这些 key 长时间没有人访问,并且还占用了比较大的内存空间时,我们就会想及时的清理掉这些 key。Redis 本身提供了一个 OBJECT IDLETIM

背景

我们在使用 Redis 的过程中,有时候会想要知道某些 key 是否长时间没有被访问,如果这些 key 长时间没有人访问,并且还占用了比较大的内存空间时,我们就会想及时的清理掉这些 key。7N628资讯网——每日最新资讯28at.com

Redis 本身提供了一个 OBJECT IDLETIME 的命令可以让我们来查询某个 key 最后一次被访问后的秒数。7N628资讯网——每日最新资讯28at.com

https://redis.io/commands/object-idletime/7N628资讯网——每日最新资讯28at.com

但是这个命令对于分析整个 Redis 实例时会显得十分吃力,免不了 scan + object idletime 的组合。7N628资讯网——每日最新资讯28at.com

如果能把这个时间从 rdb 文件读出来再进行分析,可以有效减少对线上实例的影响,同时效率也会高不少。7N628资讯网——每日最新资讯28at.com

下面来看看如何做到的。7N628资讯网——每日最新资讯28at.com

RDB 说明

关键操作符7N628资讯网——每日最新资讯28at.com

16进制
7N628资讯网——每日最新资讯28at.com

10进制
7N628资讯网——每日最新资讯28at.com

简称
7N628资讯网——每日最新资讯28at.com

说明
7N628资讯网——每日最新资讯28at.com

0xF8
7N628资讯网——每日最新资讯28at.com

248
7N628资讯网——每日最新资讯28at.com

IDLE
7N628资讯网——每日最新资讯28at.com

标识LRU的空闲时间
7N628资讯网——每日最新资讯28at.com

0xF9
7N628资讯网——每日最新资讯28at.com

249
7N628资讯网——每日最新资讯28at.com

FREQ
7N628资讯网——每日最新资讯28at.com

标识LFU的访问频率
7N628资讯网——每日最新资讯28at.com

其中 248 和 249 两个是只会存在一个,但是它们又用的同一个数据结构,所以要把它们放在一起来说明。7N628资讯网——每日最新资讯28at.com

下面再看看一个 key value 完整的“数据结构”7N628资讯网——每日最新资讯28at.com

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

可以看到第三部分就是我们所需要的。7N628资讯网——每日最新资讯28at.com

rdb-cli 分析

rdb-cli 是老黄写的一个开源 rdb 文件分析器,源码地址:https://github.com/catcherwong/rdb-tools,感兴趣的可以关注一下。7N628资讯网——每日最新资讯28at.com

rdb-cli 里面有两个命令用于做这一块的分析。7N628资讯网——每日最新资讯28at.com

首先是7N628资讯网——每日最新资讯28at.com

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

执行这个之后,会生成一个 res.html 文件,打开这个文件会看到下面两个图:7N628资讯网——每日最新资讯28at.com

图片图片7N628资讯网——每日最新资讯28at.com

这两个图就是所有 key 的空闲分布,可以看到,就数量而言,这个 redis 实例,有超过 100w 的 key 是在 7天内没有过访问的!!7N628资讯网——每日最新资讯28at.com

有这个大致分布,但是还看不到具体的细节,所以我们要用另外一个命令来看具体是那些 key 这么离谱。7N628资讯网——每日最新资讯28at.com

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

执行这个之后,会生成一个 dump.csv 文件,打开这个文件可以看到下面的内容:7N628资讯网——每日最新资讯28at.com

图片图片7N628资讯网——每日最新资讯28at.com

着重看 idle 这一列,单位是秒。7N628资讯网——每日最新资讯28at.com

可以看到超过 7天 没访问的,最长的有 16693102 秒,换算成天,是 193 天,接近 200 天。这种数据就不应该存在 redis 里面!7N628资讯网——每日最新资讯28at.com

两个命令,用起来还算是比较方便的,也比较快得到结果,当然上述两个命令还有其他的过滤条件可以结合使用,用 -h 即可查看。7N628资讯网——每日最新资讯28at.com

小结

对于设置了 LRU 相关策略的 Redis 实例才可以用这个方法去分析空闲分布,如果是 LFU 相关策略的,则无法看到空闲分布!!7N628资讯网——每日最新资讯28at.com

原因的话,object idletime 已经告诉我们了。7N628资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-82031-0.html聊一聊如何离线分析Redis缓存的空闲分布

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 探索C++类中static关键字的妙用

下一篇: 深入掌握Rust测试:从基础用例到控制测试执行的完全指南

标签:
  • 热门焦点
Top