Redis高性能归功于它将数据保存在内存中,读取数据速度很快。也正是因为Redis将数据保存在内存中,容易导致数据丢失,导致不安全因素,所以将Redis中的数据持久化到硬盘就很有必要。目前Redis的持久化方式有两种,一种是RDB方式,一种是AOF方式。下面详细讲解RDB方式和AOF方式持久化。
一、Redis的RDB方式持久化数据到硬盘
这种方式是Redis默认支持的,不要进行任何的配置就可进行。RDB方式是让数据在指定的时间内将数据集快照保存到硬盘,比如设置多少秒让数据集快照保存到硬盘。
RDB方式持久化的优点:
1、当使用RDB方式持久化的时候,所有的数据集快照都会保存在同一个文件中,利于数据的备份;
2、RDB方式持久化时,持久化进程会分叉出子进程,让其子进程去执行持久化工作,这样可以避免服务器进程进行I/O流的操作
3、相比于AOF方式持久化,当持久化大大数据集的时候,RDB方式的启动效率更高
RDB方式持久化的缺点:
1、数据高可用性(最大限度的保证数据完整性)不好,因为RDB采用的是特定时间段对数据集快照保存到硬盘,假设30秒保存一次,如果在28秒的时候出现了异常或者服务器宕机,那么前28秒的数据集快照将无法保存的硬盘,会造成数据丢失。
RDB方式持久化默认配置:
打开redis的配置文件redis.conf文件,第147,182行,191行,如下图:
RDB方式持久化的默认配置
持久化文件文件名和保存路径
redis的目录下的持久化文件dump.rdb
二、Redis的AOF方式持久化数据
这种方式是记录Redis的每一步操作到日志,当Redis服务器重新启动的时候,会自动去读取该日志文件,并且重新构建Redis数据库,以保证数据的完整性。
AOF持久化的优点:
1、AOF持久化方式有三种,分别是每秒持久化,每修改持久化,不持久化
a)、每秒持久化
顾名思义,就是每隔一秒就会进行一次持久化,这种方式是异步进行的,效率很高,但是如果服务器宕机,也就意味着这一秒的数据丢失了,不能保证数据的高可用性和安全性
b)、每修改持久化
顾名思义,也就是每进行一次修改操作就进行一次持久化操作,这种方式是同步的,这也就意味着效率很低,但是安全性是最高的
c)、不持久化
就是不进行持久化的操作
2、由于AOF方式持久化是将每一步操作都记录到日志当中,并且持久化操作是通过append的方式追加数据的,即使服务器宕机或者崩溃,也并不影响append以前的数据完整性,即使服务器宕机或者服务器崩溃了,也可以通过redis-check-aof工具来解决数据一致性的问题。
3、如果日志文件数据量很大,redis会启动重写方案,建立一个新的日志文件,将后续的修改操作进行详细记录,并且将后续的操作通过append的方式追加到原来的日志文件中,日志文件详细记录了每一步修改操作,因此可以很容易的对数据进行重建。
AOF方式持久化的缺点
1、由于AOF方式详细记录了 每一步修改操作,所以对于同样大小的数据集而言,AOF方式的日志文件比RDB持久化文件要大
2、两者同步策略不同,AOF方式的效率比RDB的效率要低。
AOF方式的配置:
同样打开redis的配置文件redis.conf文件
AOF方式持久化配置文件
appendonly.aof文件保存位置在redis安装目录下,与dump.rdb在同一级目录下。