redis持久化
1.配置aof,并且形成rewrite之前和之后的对比
2.配置rdb,手动命令和后台触发,截图对比持久化之前和之后的数据文件的差异
一.默认开启快照dump
#save "" 不配置rdb
save 900 1 # 900秒1次修改
save 300 10 # 300秒10次修改
save 60 10000 # 60秒1W次修改
rdbcompression yes # 是否对rdb文件进行压缩
rdbchecksum yes # 是否对rdb文件进行校验
stop-writes-on-bgsave-error no # 生成rdb错误是否继续写入,默认不写入
dir /usr/local/redis/data # rdb保存的目录
dbfilename dump.rdb # rdb的文件名
- 1.1 redis启动后会优先读取rdb文件
- 1.2 save命令会阻塞请求
- 1.3 bgsave异步保存rdb
二.默认关闭AOF,需手动打开
appendonly yes # 是否打开aof,默认关闭
appendfilename "appendonly.aof" # aof文件,保存在dir /usr/local/redis/data
appendfsync everysec
选项 同步频率
always 每个 Redis 命令都要同步写入硬盘。这样会严重降低 Redis 的性能
everysec 每秒执行一次同步,显式地将多个写命令同步到硬盘
no 让操作系统来决定应该何时进行同步
三.rdb持久化
- 3.1关闭rdb
save ""
#save 900 1
#save 300 10
#save 60 10000
- 3.2因为原来修改过,因此存在数据
127.0.0.1:6379> info keyspace
# Keyspace
db0:keys=4,expires=0,avg_ttl=0
db1:keys=1,expires=0,avg_ttl=0
db15:keys=1,expires=0,avg_ttl=0
127.0.0.1:6379> config get dir
1) "dir"
2) "/usr/local/redis/work"
- 3.3删除rdb文件
rm -rf /usr/local/redis/work/*
- 3.4开启后没有任何key
127.0.0.1:6379> config get save
1) "save"
2) ""
127.0.0.1:6379> info keyspace
# Keyspace
- 3.5set一个key并保存重启
27.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> save
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> get k2
"v2"
127.0.0.1:6379> bgsave
Background saving started
# 在dir参数目录/usr/local/redis/work/下保存默认rdb文件dump.rdb
# 重启后key存在,数据在save时被持久化
127.0.0.1:6379> info keyspace
# Keyspace
db0:keys=2,expires=0,avg_ttl=0
四.aof持久化
清空所有key
flushall
- 4.1打开aof,保持rdb关闭
appendonly yes
appendfilename "appendonly.aof"
127.0.0.1:6379> config get appendonly
1) "appendonly"
2) "yes"
- 4.2set后直接关闭
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> set k3 v3
OK
127.0.0.1:6379> shutdown
- 4.3在目录下发现aof文件,重启后key值依然存在
[root@haproxy01 work]# ls
appendonly.aof redis_3.140.log
127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
五.持久化读取顺序
- 5.1 直接读取rdb
- 5.2 rdb存在先读rdb后读aoff
- 5.3 rdb不存在则读取aof
- 5.4 都不存在则以空数据库启动