redis专题二:redis的持久化
一、redis的持久化机制
就是在指定的时间间隔内,将内存当中的数据集快照写入磁盘,它恢复时是将快照文件直接读到内存
什么意思呢?我们都知道,内存当中的数据,如果我们一断电,那么数据必然会丢失,但是玩过redis的同学应该都知道,我们一关机之后再启动的时候数据是还在的,所以它必然是在redis启动的时候重新去加载了持久化的文件
二、redis提供两种方式进行持久化
一种是RDB持久化默认,
另外一种是AOF(append only file)持久化。
1.RDB是什么?
原理是redis会单独创建(fork)一个与当前进程一模一样的子进程来进行持久化,这个子进程的所有数据(变量,环境变量,程序程序计数器等)都和原进程一模一样,会先将数据写入到一个临时文件中,待持久化结束了,再用这个临时文件替换上次持久化好的文件,整个过程中,主进程不进行任何的io操作,这就确保了极高的性能。
1)这个持久化文件在哪里
2)他什么时候fork子进程,或者什么时候触发rdb持久化机制:
(1)shutdown时,如果没有开启aof,会触发配置文件中默认的快照配置
(2)执行命令save或者bgsave save是只管保存,其他不管,全部阻塞 bgsave: redis会在后台异步进行快照操作,同时可以响应客户端的请求
(3)执行flushall命令 但是里面是空的,无意义
redis.conf:
2.aof(–fix)
ls -l --block-size=M
1)aof是什么?
原理是将Reids的操作日志以追加的方式写入文件,读操作是不记录的
开启:
2)这个持久化文件在哪里
可以直接指定位置,和rdb一样
3)触发机制(根据配置文件配置项)
no:表示等操作系统进行数据缓存同步到磁盘(快,持久化没保证)
always:同步持久化,每次发生数据变更时,立即记录到磁盘(慢,安全)
everysec:表示每秒同步一次(默认值,很快,但可能会丢失一秒以内的数据)
4)aof重写机制
三、redis4.0后混合持久化机制
4.0版本的混合持久化默认关闭的,通过aof-use-rdb-preamble配置参数控制,yes则表示开启,no表示禁用,5.0之后默认开启。
混合持久化是通过bgrewriteaof完成的,不同的是当开启混合持久化时,fork出的子进程先将共享的内存副本全量的以RDB方式写入aof文件,然后在将重写缓冲区的增量命令以AOF方式写入到文件,写入完成后通知主进程更新统计信息,并将新的含有RDB格式和AOF格式的AOF文件替换旧的的AOF文件。简单的说:新的AOF文件前半段是RDB格式的全量数据后半段是AOF格式的增量数据。
优点:混合持久化结合了RDB持久化 和 AOF 持久化的优点, 由于绝大部分都是RDB格式,加载速度快,同时结合AOF,增量的数据以AOF方式保存了,数据更少的丢失。
缺点:兼容性差,一旦开启了混合持久化,在4.0之前版本都不识别该aof文件,同时由于前部分是RDB格式,阅读性较差
四、redis启动加载持久化
六、小总结:
1.redis提供了rdb持久化方案,为什么还要aof?
优化数据丢失问题,rdb会丢失最后一次快照后的数据,aof丢失不会超过2秒的数据
2.如果aof和rdb同时存在,听谁的?
aof
3.rdb和aof优势劣势
rdb 适合大规模的数据恢复,对数据完整性和一致性不高 , 在一定间隔时间做一次备份,如果redis意外down机的话,就会丢失最后一次快照后的所有操作
aof 根据配置项而定
5.官方建议
两种持久化机制同时开启,如果两个同时开启 优先使用aof持久化机制
七、性能建议(这里只针对单机版redis持久化做性能建议):
因为RDB文件只用作后备用途,只要15分钟备份一次就够了,只保留save 900 1这条规则。
如果Enalbe AOF,好处是在最恶劣情况下也只会丢失不超过两秒数据,启动脚本较简单只load自己的AOF文件就可以了。
代价一是带来了持续的IO,二是AOF rewrite的最后将rewrite过程中产生的新数据写到新文件造成的阻塞几乎是不可避免的。
只要硬盘许可,应该尽量减少AOF rewrite的频率,AOF重写的基础大小默认值64M太小了,可以设到5G以上。
默认超过原大小100%大小时重写可以改到适当的数值。
以上信息来我在鲁班学院学习的总结,鲁班学院很不错,值得报班
上一篇: Python上下文管理器
下一篇: 数据结构-字典
推荐阅读
-
redis源代码分析18–持久化之aof
-
SpringBoot+Mybatis项目使用Redis做Mybatis的二级缓存的方法
-
Redis的持久化机制是什么?各自的优缺点?
-
docker-compose一键部署redis一主二从三哨兵模式(含密码,数据持久化)
-
Redis AOF 持久化详解
-
Redis系列(二):Redis的数据类型及命令操作
-
《吊打面试官》系列-Redis哨兵、持久化、主从、手撕LRU
-
Redis持久化--Redis宕机或者出现意外删库导致数据丢失--解决方案
-
Redis持久化深入理解
-
JAVAEE——宜立方商城06:Redis安装、数据类型和持久化方案、Redis集群分析与搭建、实现缓存和同步