黑马程序员技术交流社区

标题: 【广州校区】+Redis持久化机制 [打印本页]

作者: wujianhui    时间: 2019-8-29 16:30
标题: 【广州校区】+Redis持久化机制
        Redis 是一个开源( BSD 许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持的数据类型很丰富,如字符串、链表、集 合、以及散列等,并且还支持多种排序功能。
一、什么叫持久化?
        用一句话可以将持久化概括为:将数据(如内存中的对象)保存到可永久保存的存储设备中。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、 XML 数据文件中等等。同时,也可以从应用层和系统层这两个层面来理解持久化:
       应用层:如果关闭( Close )你的应用然后重新启动则先前的数据依然存在。
      系统层:如果关闭( Shutdown )你的系统(电脑)然后重新启动则先前的数据依然存在。
二、Redis 为什么要持久化?
       Redis 中的数据类型都支持 push/pop、add/remove 及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis 支持各种不同方式的排序。与 Memcached 一样,为了保证效率,数据都是缓存在内存中。
        对,数据都是缓存在内存中的,当你重启系统或者关闭系统后,缓存在内存中的数据都会消失殆尽,再也找不回来了。所以,为了让数据能够长期保存,就要将 Redis 放在缓存中的数据做持久化存储。
三、Redis 怎么实现持久化?
       在设计之初,Redis 就已经考虑到了这个问题。官方提供了多种不同级别的数据持久化的方式:
1、RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储。
2、AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大。
3、如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式。
4、你也可以同时开启两种持久化方式, 在这种情况下, 当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。
如果你不知道该选择哪一个级别的持久化方式,那我们就先来了解一下 AOF 方式和 RDB 方式有什么样的区别,并且它们各自有何优劣,学习完之后,再来考虑该选择哪一种级别。
四、RDB 方式与 AOF 方式的优势对比
       首先我们来看一看官方对于两种方式的优点描述,并做个对比,然后再看一看两种方式的缺点描述。
1.RDB 方式的优点

2.当 Redis 需要保存 dump.rdb 文件时, 服务器执行以下操作:
      Redis 调用forks. 同时拥有父进程和子进程。子进程将数据集写入到一个临时 RDB 文件中。当子进程完成对新 RDB 文件的写入时,Redis 用新 RDB 文件替换原来的 RDB 文件,并删除旧的 RDB 文件。这种工作方式使得 Redis 可以从写时复制(copy-on-write)机制中获益。
3.AOF 方式的优点
      使用AOF 会让你的Redis更加耐久:

4、优点对比总结
       RDB 方式可以保存过去一段时间内的数据,并且保存结果是一个单一的文件,可以将文件备份到其他服务器,并且在回复大量数据的时候,RDB 方式的速度会比 AOF 方式的回复速度要快。
       AOF 方式默认每秒钟备份1次,频率很高,它的操作方式是以追加的方式记录日志而不是数据,并且它的重写过程是按顺序进行追加,所以它的文件内容非常容易读懂。可以在某些需要的时候打开 AOF 文件对其编辑,增加或删除某些记录,最后再执行恢复操作。
五、RDB 方式与 AOF 方式的缺点对比
1.RDB 方式的缺点

2.AOF 方式的缺点

3.缺点对比总结

六、工作原理
      AOF 重写和 RDB 创建快照一样,都巧妙地利用了写时复制机制:

转载自:https://blog.csdn.net/bible_reader/article/details/84138665







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2