redis持久化

536 阅读3分钟

「这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战

Redis是内存数据库,如果不将内存中的数据保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以redis提供了持久化功能

触发机制

1.save的规则满足的情况下,会自动触发rdb规则

2.执行flushall命令,也会触发我们的rdb规则

2,退出redis,也会产生rdb文件

备份就自动生成一个dump.rdb

如果恢复rdb文件

1、将rdb文件放在redis启动目录,redis启动的时候会自动检测dump.rdb恢复其中的数据

2、查看需要存在的位置

1)"dir"

2)"/usr/local/bin" #如果在这个目录存在dump.rdb文件,启动就会恢复其中的数据

优点:

1.适合大规模的数据恢复

2.对数据的完整性要求不高

缺点:

1.需要一定的时间间隔进行操作,如果redis意外宕机了,这个最后一次修改的数据就没有了

2.fork进程的时候,会占用一定的内存空间

持久化测试

image-20210227102645593.png

2.查看 usr/local/bin目录下有一个dump.rdb文件(快照)

image-20210227102756605.png 3.删除dump.rdb,连接客户端,修改key

image-20210227103037746.png

4.关闭redis查看当前目录下已经生成了一个dump.rdb文件

image-20210227103311409.png

优点和缺点

优点:

1.每一次修改都同步·,文件的完整性更加好

2.每秒同步一次,可能会丢失一秒的数据

3.从不同步,效率是最高

缺点:

1.相对于数据文件来说,aof远远大于rdb,修复速率小于rdb

2.aof运行效率也要比rdb慢,所以我们redis默认配置就是rdb持久化

测试

1.修改配置文件

image-20210227111533398.png

appendonly yes   #是否开启aof

appendfilename "appendonly.aof"  #aof文件名

appendsync always #每次修改都会sync消耗性能
appendfsync everysec   #每秒执行一次sync,可能会丢失这一秒的数据
appendfsync no #不执行sync,这个时候操作系统自己同步数据,速度最快
#重写
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb #如果aof文件太大了,会fork一个新的进程

2.连接redis进行操作

[root@hadoop1 bin]# ls
myconfig  redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli  redis-sentinel  redis-server
[root@hadoop1 bin]# redis-server myconfig/redis.conf
36012:C 27 Feb 2021 11:19:52.983 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
36012:C 27 Feb 2021 11:19:52.983 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=36012, just started
36012:C 27 Feb 2021 11:19:52.983 # Configuration loaded
[root@hadoop1 bin]# redis-cli -p 6379
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> get k3
"v3"
127.0.0.1:6379> shutdown 
not connected> quit
[root@hadoop1 bin]# ls
appendonly.aof  dump.rdb  myconfig  redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli  redis-sentinel  redis-server
[root@hadoop1 bin]# 

3.关闭redis后产生了一个appendonly.aof文件

查看appendonly.aof文件中的内容发现是刚刚输入的指令

image-20210227112257523.png