服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Redis - 聊一聊如何离线分析Redis缓存的空闲分布

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

2024-04-08 15:03不才老黄 Redis

我们在使用 Redis 的过程中,有时候会想要知道某些 key 是否长时间没有被访问,如果这些 key 长时间没有人访问,并且还占用了比较大的内存空间时,我们就会想及时的清理掉这些 key。Redis 本身提供了一个 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 文件,打开这个文件会看到下面两个图:

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

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

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

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

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

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

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

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

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

小结

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

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

原文地址:https://mp.weixin.qq.com/s/k074G-MeoFkEpISVEXgcsg

延伸 · 阅读

精彩推荐
  • RedisRedis源码解析:集群手动故障转移、从节点迁移详解

    Redis源码解析:集群手动故障转移、从节点迁移详解

    这篇文章主要介绍了Redis源码解析:集群手动故障转移、从节点迁移的相关内容,涉及通过集群定时器函数clusterCron实现从节点迁移等知识,具有一定参考价...

    gqtcgq2752019-11-08
  • Redis利用ganglia监控redis的最新解决方法

    利用ganglia监控redis的最新解决方法

    这篇文章主要给大家介绍了如何利用ganglia监控redis的最新解决方法,网上的资料基本上就是13年的一篇文章,但发现文章的内容有些许问题,于是整理了下...

    leo108''''s blog3722019-11-01
  • RedisRedis高效率原因及数据结构分析

    Redis高效率原因及数据结构分析

    这篇文章主要为大家详细的介绍了Redis高效的原因以及分析了Redis高效的数据结构,有需要的朋友可以借鉴参考下,希望能够有所帮助...

    不会编程的派大星5472021-11-18
  • RedisRedis 命令整理并说明如何使用

    Redis 命令整理并说明如何使用

    这篇文章主要介绍了Redis 命令整理并说明如何使用的相关资料,需要的朋友可以参考下 ...

    lqh3192019-11-04
  • Redisredis持久化的介绍

    redis持久化的介绍

    今天小编就为大家分享一篇关于redis持久化的介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 ...

    qq_431937971822019-11-22
  • RedisRedis Cluster 集群搭建你会吗

    Redis Cluster 集群搭建你会吗

    这篇文章主要介绍了Redis Cluster 集群搭建过程,本文分步骤通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...

    一线大码8062021-09-15
  • RedisRedis自动化安装及集群实现搭建过程

    Redis自动化安装及集群实现搭建过程

    这篇文章主要介绍了Redis自动化安装以及集群实现搭建过程,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 ...

    mrr2042019-11-28
  • Redisredis分布式锁之可重入锁的实现代码

    redis分布式锁之可重入锁的实现代码

    相信大家都知道可重入锁的作用防止在同一线程中多次获取锁而导致死锁发生,本文通过几个例子给大家分享redis分布式锁之可重入锁的实现代码,对redi...

    _否极泰来9002021-08-05