redis 持久化

Scroll Down

第二章:redis RDB持久化

01. RDB持久化和AOF持久化

  • 优缺点
RDB: 类似快照,把当前内存里的数据持久化到硬盘
优点:压缩格式,恢复数据速度快
缺点:不是实时复制,可能会造成数据丢失,操作比较重量

AOF:类似于mysql的binlog日志,可以设置成每秒/每次操作都以追加的形式保存在日志文件中
优点:实时复制,比较安全,最多丢失1秒的数据,具备一定的可读性
缺点:文件比较大,恢复数据速度慢
  • 使用哪种持久化更好
https://redis.io/topics/persistence
1.开启混合模式
2.开启aof
3.不开启rdb
4.rdb采⽤定时任务的⽅式定时备份
5.可以从库开启RDB进⾏备份
  • AOFRDB读取实验
aof和rdb同时存在,redis重启会读取哪⼀个数据?
当aof和rdb同时存在的时候,redis会优先读取aof的内容

02. RDB 持久化配置

cat >> /opt/redis_6379/conf/redis_6379.conf <<EOF

# 900秒 有1条key改变就会触发rdb保存
save 900 1
save 300 10
save 60 10000
dbfilename redis.rdb
dir /data/redis_6379
EOF

03. 重启redis,并测试

重启:

systemctl restart redis

连接测试:

[root@db01 opt]# redis-cli
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> BGSAVE
Background saving started

[root@db01 opt]# ll /data/redis_6379/
-rw-r--r-- 1 redis redis 104 Jun 25 12:04 redis.rdb

[root@db01 opt]# systemctl restart redis
[root@db01 opt]# redis-cli 
127.0.0.1:6379> get k1
"v1"

04. RDB 持久化总结

没配置save参数时:
1.shutdown/pkill/kill都不会持久化保存
2.可以⼿动执⾏bgsave

配置save参数时:
1.shutdown/pkill/kill均会⾃动触发bgsave持久化保存数据
2.pkill -9 不会触发持久化

恢复时:
1.持久化数据⽂件名要和配置⽂件⾥定义的⼀样才能被识别
2.RDB⽂件只有⼀个数据⽂件,迁移和备份只要这⼀个RDB⽂件即可

注意:
RDB⾼版本兼容低版本,低版本不能兼容⾼版本
3.x >> 5.X >> OK
5.x >> 3.x >> NoOK

第三章:redis AOF持久化

01. AOF 持久化配置

cat >> /opt/redis_6379/conf/redis_6379.conf <<EOF
# aof 持久化配置
appendonly yes
appendfilename "redis.aof"
appendfsync everysec
EOF

02. AOF重写机制

01.清理无效的命令,例如:
    set k1 v1
    set k2 v2
    del k1
  aof重写的时候就会把下面两条命令删除
    set k1 v1
    del k1
02.清理完无效命令后,会压缩文件空间,减小文件大小

03. AOF故障处理

1.aof修复命令不要⽤,因为他的修复⽅案⾮常粗暴,⼀⼑切,从出错的地⽅到最后全部删除
2.任何操作之前,先备份数据

04. 如果设置了过期时间,恢复数据后会如何处理?

1.aof⽂件会记录下过期时间
2.恢复的时候会去对⽐过期时间和当前时间,如果超过了,就删除key
3.key的过期时间不受备份影响