「这是我参与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进程的时候,会占用一定的内存空间
持久化测试
2.查看 usr/local/bin目录下有一个dump.rdb文件(快照)
3.删除dump.rdb,连接客户端,修改key
4.关闭redis查看当前目录下已经生成了一个dump.rdb文件
优点和缺点
优点:
1.每一次修改都同步·,文件的完整性更加好
2.每秒同步一次,可能会丢失一秒的数据
3.从不同步,效率是最高
缺点:
1.相对于数据文件来说,aof远远大于rdb,修复速率小于rdb
2.aof运行效率也要比rdb慢,所以我们redis默认配置就是rdb持久化
测试
1.修改配置文件
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文件中的内容发现是刚刚输入的指令