当前位置:   article > 正文

Redis的持久化机制是怎样的?

Redis的持久化机制是怎样的?

Redis提供了两种持久化的机制,分别的RDB和AOF。

RDB
RDB是将Redis的内存中的数据(以快照的形式)定期保存到磁盘上,以防治数据在Redis进程异常退出或服务器断电等情况下丢失。

RDB的优点是:快照文件小、恢复速度快,适合做备份和灾难恢复。
RDB的缺点是:定期更新可能会丢数据

AOF
AOF是将Redis的所有写操作追加到AOF文件(Append Only File)的末尾,从而记录了Redis服务器运行期间所有修改操作的详细记录。当Redis重新启动时,可以通过执行AOF文件中共保存的写操作来恢复数据。

但是如果Redis刚刚执行完一个写命令,还没来的急写AOF文件就宕机了,那么这个命令和相应的数据就会丢失了。但是它也比RDB要更加靠谱一些。

AOF的优点是:可以实现更高的数据可靠性、支持更细粒度的数据恢复,适合做数据存档和数据备份。

AOF的缺点是:文件大专用空间更多,每次写操作都需要写磁盘导致负载较高。

比较
RDB和AOF在数据可靠性、性能、存储空间等方面都有不同的优缺点,具体可以根据实际业务需求和硬件条件来选择合适的持久化机制,或者同时使用两种持久化机制来实现更高的数据可靠性。

特性RDBAOF
数据可靠性可能会丢失最后一次快照之后的数据保证最后一次写操作之前的数据不会丢失
性能读写性能较高,适合做数据恢复写性能较高,适合做数据存档
存储空间占用快照文件较小,占用空间较少AOF文件较大,占用空间较多
回复时间从快照文件中共恢复数据较快从AOF文件中恢复数据较慢

混合持久化
RDB和AOF各自有优缺点,为了让用户能够同时拥有上述两种持久化的优点,Redis4.0推出了RDB-AOF混合持久化。

在开启混合持久化的情况下,AOF重写时会把Redis的持久化数据,以RDB的格式写入到AOF文件的开头,之后的数据再以AOF的格式化追加到文件的末尾。

aof-use-rdb-preamble是开启混合模式的参数。

混合持久化结合了RDB和AOF持久化的优点,开头为RDB的格式,使得Redis可以更快的启动,同时结合AOF的优点,又减低了大量数据丢失的风险。

但是,在AOF文件中共添加了RDB格式的内容,使得AOF文件的可读性变得很差;如果开启混合持久化,那么此混合持久化AOF文件,是不能用在旧版本中的,不向下兼容的。

扩展知识
Redis能完全保证数据不丢失吗?
不能,因为Redis是基于内存存储的,当Redis进程异常退出或服务器断电等情况发生时,内存中的数据可能会丢失。

未了防止数据丢失,Redis提供了RDB和AOF的持久化机制,Redis可以将数据从内存保存到磁盘中,以便在Redis进程异常退出或服务器断电等情况下,通过从磁盘中加载数据来恢复数据。

但是,持久化机制也不是绝对可靠的,归根结底Redis还是个缓存,它并不是完全给你做持久化用的,所以还是要有自己的持久化方式,比如双写到数据库。

因此,未了最大程度的保障数据安全,建议采用多种手段来提高数据可靠性,如定期备份数据、使用主从复制机、使用集群模式等。

AOF的三种回写策略
AOF有三种数据写回策略,分别是Always,Everysec和No。

Always,同步写回:每个写命令执行完,立马同步地将日志写回磁盘;

Everysec,每秒写回:每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,每隔一秒把缓冲区的内容写入磁盘;

No,操作系统控制的写回:每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,有操作系统决定何时将缓冲区内容写回磁盘。

“同步写回”可靠性肯定是最高的,但是它在每一个写命令后都有一个落盘操作,而且还是同步的,这和直接写磁盘类型的数据库有啥区别?

“操作系统控制的写回”这种事最不靠谱的,谁知道操作系统啥时候帮你做持久化,万一没来及持久化就宕机了,不就gg了。

“每秒写回”是在二者之间这种了一下,异步的每秒把数据写回到磁盘上,最大程度的提高效率和降低风险。.

Always也不能保证不丢
即使是在always策略下,也不能保证100%不丢失数据的,主要处于一下原因:

1.磁盘和系统故障:如果在写入操作和同步到磁盘之间发生硬件故障或系统崩溃,可能会丢失最近的写操作。

2.操作系统缓冲区:即使Redis请求立即将数据同步到磁盘,操作系统的I/O缓冲区可能会导致实际写入磁盘的操作延迟发生。如果在写入缓冲区之后,没写磁盘钱,机器挂了,那么数据就丢了。

操作系统缓冲区,通常是操作系统用于管理数据输入输出(I/O)的一种内存区域。当程序进行文件写入操作时,数据通常首先被写入到这个缓冲区,而不是直接写入到硬盘。

3.磁盘写入延迟:磁盘的写入并非实时完成,特别是在涉及到机械硬盘时,写入延迟主要由磁盘旋转速度(RPM)和寻道时间决定。如果在这个延迟过程中,机器挂了,那么数据也就丢了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/326266
推荐阅读
相关标签
  

闽ICP备14008679号