一个Redis dump文件的简要分析过程

一个,redis,dump,文件,简要,分析,过程 · 浏览次数 : 293

小编点评

## 解读info日志信息 **第一部分:持久化相关的分析** * `rdb_changes_since_last_save`: 记录最近一次成功生成rdb文件时写入的命令个数。 * `rdb_bgsave_in_progress`: 表示服务器是否正在创建rdb文件。 * `rdb_last_save_time`: 记录最近一次成功生成rdb文件的时间戳。 * `rdb_last_bgsave_status`: 指示最近一次rdb持久化是否成功。 * `rdb_last_bgsave_time_sec`: 记录最近一次成功生成rdb文件消耗的时间。 * `rdb_current_bgsave_time_sec`: 表示当前服务器正在创建rdb文件的操作已经消耗的时间。 **第二部分:分析dump文件内容** * `redis_20221216_ZJ.txt` 是包含 key 信息的文本文件。 * `awk` 命令用于读取文件,并根据不同的字段进行处理。 * `uniq -c` 统计相同关键字出现的次数,并按出现次数排序。 * `sort -k1hr` 按关键字的字母排序,并保留每个关键字的第一个字符。 **第三部分:分析key值过期时间信息** * `redis_20221216_ZJ.txt` 中包含 key值及其对应的有效时间信息。 * `awk` 命令用于读取文件,并根据不同的字段进行处理。 * `sort -k1hr` 按有效时间排序,并保留每个 key 的最后一条记录。 **第四部分:总结分析** * 生成内容时需要带简单的排版,以便观察 key 的出现频率、有效时间、以及 key 值与有效时间的相关信息。 **总结:** * 首先分析持久化相关的分析,包括记录记录rdb变化、创建rdb文件的进程以及rdb持久化状态等信息。 * 然后分析key值过期时间信息,并逆序排序。 * 最后,总结分析生成内容的信息,方便观察和分析。

正文

摘要

遇到一个老大难的问题.
让帮忙分析一下一个Redis的dump文件. 
虽然之前写过了rdb和rdr的文档
但是感觉大家都喜欢拿来主义.
没办法. 今天继续进行深入一点的分析.
原理其实还是基于rdb的. 不过多思考了一点别的内容.

分析原始文件

rdb -c memory redisdump.rdb -f redis_20221216_ZJ.txt
# 这个命令很费内存和CPU, 会导致较长的时间占用
rdr show -p 8888 redisdump.rdb
# 这个命令是打开一个浏览器窗口进行展示. 

分析info日志

上面两个命令的时间都极为漫长, 所以可以先看一下现场发回来的info信息
# 第一部分持久化相关的分析
# 参数含义
rdb_changes_since_last_save:表示最近一次成功生成rdb文件时写入的命令个数。
rdb_bgsave_in_progress:表示服务器是否正在创建rdb文件。
rdb_last_save_time:表示最近一次成功生成rdb文件的时间戳。
rdb_last_bgsave_status:标识最近一次rdb持久化是否成功。
rdb_last_bgsave_time_sec:表示最近一次成功生成rdb文件消耗的时间。
rdb_current_bgsave_time_sec:表示当前服务器正在创建rdb文件的操作已经消耗的时间
rdb_last_cow_size:表示RDB过程中父进程与子进程比较执行了多少修改操作。

From https://weibo.com/ttarticle/p/show?id=2309404650615585505652

分析info日志

# 内存设置相关
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction

未设置最高内存限制,容易搞出问题感觉. 
used_memory_human:7.33G
used_memory_rss_human:9.49G

分析rdb转储的key信息文件

# 第一步: 
分析前导key的信息以及进行排序
注意 此为一条命令. 承接rdb 分析的 dump文件的结果. 
cat redis_20221216_ZJ.txt |awk -F "," '{print $3}' 
|awk -F ":" '{print $1}'|sort |uniq -c |
sort -k1hr  >redis_keys_01.txt

将key前缀从大到小进行排列并且转储到 redis_keys_01.txt 目录中. 

# 第二步:
分析dump里面key值的过期时间信息, 并且逆序排序
cat redis_20221216_ZJ.txt |awk -F "," '{print $NF,$3}' |sort -k1hr
> redis_expire.txt
注意 最前面的一部分 是没有过期时间的key
expiry key 进行分割. 后面的key 都是根据时间时间由早到晚排列

其实 info里面没有配置 maxmemory 也没有设置 memory_policy 这么查没意义.
过期和不过期的key 都存在于redis-server的进程里面. 

在线监控Redis执行的命令 60秒钟

# 注意timeout命令会监控60秒的时间. 然后写入到对应的文件中
# 可以作为简单进行性能判断的依旧.
# grafana的抽象频率太低了可能会导致误判. 但是monitor会出现严重的性能损耗.
# 酌情使用
# 不给钱 用坏了是我是不会赔的. 
time timeout 60  redis-cli  -p 6377 monitor >20221216_6377.txt
time timeout 60  redis-cli  -p 6378 monitor >20221216_6378.txt
time timeout 60  redis-cli  -p 6379 monitor >20221216_6379.txt

与一个Redis dump文件的简要分析过程相似的内容:

一个Redis dump文件的简要分析过程

摘要 遇到一个老大难的问题. 让帮忙分析一下一个Redis的dump文件. 虽然之前写过了rdb和rdr的文档 但是感觉大家都喜欢拿来主义. 没办法. 今天继续进行深入一点的分析. 原理其实还是基于rdb的. 不过多思考了一点别的内容. 分析原始文件 rdb -c memory redisdump.

[转帖]Redis数据库的备份与恢复

Redis备份 当程序有较多的任务在执行时,我们可以redis-cli模式下执行 bgsave,进入后台进行备份. Snapshot 当然我们可以直接运行save命令.会写入dump.rdb文件。 配置说明: save 900 1 #当900秒之后有一个key变化进行持久化保存 save 300 1

一个比 Redis 性能更强的数据库

给大家推荐一个比Redis性能更强的数据:KeyDB KeyDB是Redis的高性能分支,侧重于多线程、内存效率和高吞吐量。除了性能改进外,KeyDB还提供主动复制、闪存和子密钥过期等功能。KeyDB具有MVCC架构,允许您在不阻塞数据库和降低性能的情况下执行密钥和扫描等查询。 KeyDB与Redi

【Azure Redis 缓存】使用开源工具redis-copy时遇见6379端口无法连接到Redis服务器的问题

问题描述 当使用Azure Redis服务时,需要把一个Redis服务的数据导入到另一个Redis上,因为Redis服务没有使用高级版,所以不支持直接导入/导出RDB文件。 以编程方式来读取数据并写入到新的Redis服务端,使用开源工具 Redis-Copy 却遇见了 6379 端口无法连接的问题。

[转帖]炸了~Redis bigkey导致生产事故-bigkey问题全面分析

文章首发于公众号:BiggerBoy 原文链接 一个Redis生产事故的复盘,整理这篇文章分享给大家。本期文章分析Redis中的bigkey相关问题,主要从以下几个点入手: 文章目录 什么是bigkey?bigkey的危害bigkey的产生如何发现bigkey实际生产的操作方式 如何优化bigkey

[转帖]Redis配置文件介绍

https://www.cnblogs.com/fanqisoft/p/10422381.html Redis在源码包中存放了一个Redis配置实例文件,文件中对各个配置点进行了简单的介绍,我也通过这个文件来对Redis的一些配置进行一些简单介绍。 一.UNITS(单位)【了解】 1.Redis服务

[转帖]炸了~Redis bigkey导致生产事故-bigkey问题全面分析

https://blog.csdn.net/ibigboy/article/details/124216874 文章首发于公众号:BiggerBoy 原文链接 一个Redis生产事故的复盘,整理这篇文章分享给大家。本期文章分析Redis中的bigkey相关问题,主要从以下几个点入手: 文章目录 什么

[转帖]Redis configuration

Redis configuration Redis可以仅使用内建的默认配置启动,而不需要指定配置文件。但是,这种启动仅推荐用于测试和开发。 对于配置Redis恰当的方式是提供一个Redis配置文件,通常叫做redis.conf。redis.conf包含大量的指令,格式如下: keyword argu

Linux时间戳转换成易读格式的方法

背景 最近一直在学习Redis相关的知识. 其中遇到了一个redis monitor的命令 但是这里有一个问题是: 原生命令查询出来的时间是Unix时间戳格式的. 不太好发现查看与进行对照. 所以今天中午就进行了简单的学习,希望能够最简单的方式进行转换. 思路 认为awk命令一个就够了. 但是自己a

[转帖]Redis:我是如何与客户端进行通信的

江湖上说,天下武功,无坚不摧,唯快不破,这句话简直是为我量身定制。 我是一个Redis服务,最引以为傲的就是我的速度,我的 QPS 能达到10万级别。 在我的手下有数不清的小弟,他们会时不时到我这来存放或者取走一些数据,我管他们叫做客户端,还给他们起了英文名叫 Redis-client。 有时候一个