redis持久化(redis持久化的方式以及区别)
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文件中的内容发现是刚刚输入的指令
作者:夏季的野兽
链接:https://juejin.cn/post/7028961139186909197