Redis AOF(append only file)持久化
上文谈到了RDB,补充一个参数:save
save 900 1 # 每900s有1个key变化,时候生成RDB
save 300 10 # 每300s有10个key变化,时候生成RDB
save 60 10000 # 每60s有10000个key变化,时候生成RDB
1. 开启AOF,AOF 特点
############################## APPEND ONLY MODE ###############################
appendonly yes # 默认为no,redis默认是rdb模式;
# aof 记录的文件名
appendfilename "appendonly.aof"
#每次写入仅追加日志后进行Fsync。缓慢但安全的
# appendfsync always
# Compromise(折中)方案,一秒追加一次。
appendfsync everysec
# 由操作系统调度刷新输出缓冲区写入到aof文件
# appendfsync no
特点:
记录的是数据操作流水,丢失数据少 4.0版本之后支持开启RDB+AOF,默认关闭,可以通过配置项 aof-use-rdb-preamble 开启)
2. AOF 存在的问题:
随着日期增加 AOF 日志变得无限大,回复将会显得日志臃肿,表现为数据恢复耗时久。重写之前已经记录下来的数据指令;
在 4.0 之前: 删除抵消的命令。like:incre key 1 & decre key 1,set key 1 & delete key
4.0 之后:支持开启:aof-use-rdb-preamble 将老的数据先生成 RD 再增量的通过 AOF 添加到日志。
3. appendonly.aof 日志格式
# set key2 testvalue
*3
$3
set
$4
key2
$9
testvalue
# 执行 mset key1 1 key2 2 key33 3
# aof日志如下:
*7 # 本批命令需要往下读7行非 $ 开始的命令
$4 #接着读取4个字节宽度,‘mset’长度为4,记为 $4
mset
$4 #接着读取4个字节宽度,‘key1’长度为4,记为 $4
key1
$1 #接着读取1个字节宽度,‘1’长度为1,记为 $1
1
$4
key2
$1
2
$5 #接着读取的字节宽度,‘$key33’长度为5,记为 $5
key33
$1
3
4. aof 日志什么时候追加?
redis 提供三种追加频率:
no
不要立刻刷,只有在操作系统需要刷的时候再刷 ,比较快。如果 redis 重启了拿到的数据将不是很新的数
always
每次写操作都立刻写入到 aof 文件。慢,但是最安全
everysec
每秒写一次 (默认)
文章转载自Java壹码平川,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。