Redis的持久化的策略
官方文档说明
- AOF持久化策略
- RDB持久化的策略
AOF持久化策略
AOF持久性记录服务器接收到的每个写操作,然后,可以在服务器启动时再次重播这些操作,重建原始数据集,使用与Redis协议本身相同的格式记录命令。
appendonly yes #默认是不开启的,我们需要手动配置成no来进行开启
# The name of the append only file (default: "appendonly.aof")
appendfilename "appendonly.aof"
AOF 的执行流程
AOF策略的特点
-
同时使用这两种持久化方式,redis 默认优先加载 aof 文件(aof 数据最完整);
-
AOF 文件会在操作过程中变得越来越大
-
比如,如果你做一百次加法计算,最后你只会在数据库里面得到最终的数值,但是在你的 AOF 里面会存在 100 次记录,其中 99 条记录对最终的结果是无用的;
-
Redis 支持在不影响服务的前提下在后台子进程(主进程可以继续处理命令请求,避免阻塞主进程
)重构 AOF文件,让文件得以整理变小;
-
后台重写的触发条件
//执行 AOF 重写时,当前 AOF 大小(aof_current_size)和上一次重写时 AOF 大小(aof_base_size)的比值 auto-aof-rewrite-percentage 100 //AOF文件大于64M auto-aof-rewrite-min-size 64mb //或者用户手动通过调用 bgrewriteaof手动触发
-
AOF 文件存储格式
- redis-cli 下执行写命令
127.0.0.1:13>set name "kevin"
"OK"
127.0.0.1:13>del name
- 对应aop文件中记录的内容,就是对应的写操作命令,采用的RESP协议:Redis 的序列化协议。
*2
$6
SELECT
$2
13
*3
$3
set
$4
name
$5
kevin
*2
$3
DEL
$4
name
RDB持久化的策略
RDB 持久化(也称作快照持久化)是指将内存中的数据生成快照保存到磁盘里面,默认文件名dump.rdb
# The filename where to dump the DB
dbfilename dump.rdb
Redis 还可以通过配置文件的选项来实现每隔一段时间自动执行一次 bgsave 命令,虽然选项名称时save,实际上执行的是bgsave命令。自动执行策略可以配置多个,只要满足上面任意一个条件就会执行bgsave。
save 900 1 #900 秒之内,对数据库进行了至少 1 次修改;
save 300 10 #300 秒之内,对数据库进行了至少 10 次修改
save 60 10000 #60 秒之内,对数据库进行了至少 10000 次修改
RDB执行流程
执行了 save 命令,就会在主线程生成 RDB 文件,由于和执行操作命令在同一个线程,所以会阻塞主线程。
bgsave 是fork一个子线程进行处理,所以不会阻塞主线程。
RDB特点
- 由于存储的是数据快照文件,恢复数据很方便,也比较快
- 会丢失最后一次快照以后更改的数据