RDB(Redis DataBase)方式是通过快照完成的,当符合一定条件时Redis会自动将内存中的所有数据进行快照,并且存储到硬盘上,RDB是Redis的默认持久化方式。
vim /usr/local/redis/conf/redis.conf
save 900 1 #15分钟内有至少1个键被更改
save 300 10 #5分钟内至少有10个键被更改
save 60 1000 #1分钟内至少有10000个键被更改
#以上条件都是或的关系,当满足其一就会进行快照。
dbfilename "dump.rdb" #持久化文件名称
dir "/data/dbs/redis/6381" #持久化数据文件存放的路径
#配置文件修改后,需要重启redis服务。
还可以通过命令行的方式进行配置:
CONFIG GET save #查看redis持久化配置
CONFIG SET save "100 20" #修改redis持久化配置
#使用命令行的方式配置,即时生效,服务器重启后需要重新配置。
RDB - 手动
save
该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止。
显然该命令对于内存比较大的实例会造成长时间阻塞,这是致命的缺陷。
bgsave
执行该命令时,Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。
具体操作是Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段。
AOFAOF(APPEND ONLY MODE)是通过保存对redis服务端的写命令(如set、sadd、rpush)来记录数据库状态的,即保存你对redis数据库的写操作。
配置日志文件如下:
vim /usr/local/redis/conf/redis.conf
dir "/data/dbs/redis/6381" #AOF文件存放目录
appendonly yes #开启AOF持久化,默认关闭
appendfilename "appendonly.aof" #AOF文件名称(默认)
appendfsync no #AOF持久化策略
auto-aof-rewrite-percentage 100 #触发AOF文件重写的条件(默认)
auto-aof-rewrite-min-size 64mb #触发AOF文件重写的条件(默认)
#上面的每个参数,可以找资料了解下,不做多解释了。
RDB 与 AOF 的优缺点,见上面的即可。
至此,我们了解了 Redis 持久化的一些配置,里面的细节建议查询相关资料进行研究。
接下来继续,通过上一步我们拿到了 rdb 文件,就相当于拿到了Redis实例的数据。
解析 rdb 文件,获取key和value的值。
根据相应的数据结构及内容,估算内存消耗。
统计并生成报表。
分析工具
雪球 rdr:
https://github.com/xueqiu/rdr
redis-rdb-tools:
https://github.com/sripathikrishnan/redis-rdb-tools
小结
讲解了工作中常用的 redis 使用场景。
讲解了 redis 持久化的两个方式(RDB、AOF)。
推荐了两个分析rdb的工具。