因为Redis的数据都保留在内存中,所以它能提供高性能的缓存服务。但内存中的数据是非常容易失落的,所以Redis提供了长久化机制来保障数据的平安
Redis长久化有2钟形式:快照(RDB)和日志(AOF)
RDB快照
RDB(Redis DataBase)是指Redis应用save
或bgsave
命令保留Redis在某一时刻的数据,在呈现故障复原后通过导入RDB文件来实现原有数据的复原
开启形式
命令行中启动
应用save
或bgsave
生成RDB文件
save与bgsave的区别:
- save会阻塞过程,在RDB文件没有生成完结前,会影响应用程序对Redis的写操作
- 执行bgsave时,主过程会fork出一个子过程用来生成RDB文件,所以不会阻塞主过程
配置文件
关上redis.conf
配置文件,找到上图所示配置项。save
选项配置了触发快照生成RDB文件的条件,dbfilename
设置了RDB的文件名
save选项的含意:
- save 900 1 : 900秒内至多有1次的数据更改操作
- save 300 10 : 300秒内至多有10次的数据更改操作
- save 60 10000 : 60秒内至多有10000次的数据更改操作
只有达到3个条件中的任何一个,都会触发RDB的生成
RDB文件默认是通过LZF算法压缩的二进制文件,保留是间接的数据。在没有很大数据量的状况下,文件通常很小,有利于导入复原数据
AOF日志
下面简略理解了RDB形式,在Redis主机宕机后,咱们能够导入之前生成的RDB文件来实现数据的复原。然而RDB也有它的毛病,使得在生产环境下,不能只依附这一种形式。
AOF(AppendOnlyFile)日志是记录Redis client的每一次操作命令,并以肯定的策略将命令追加到磁盘文件中。在Redis主机呈现故障复原后,逐条执行日志中的每一条记录,来实现数据的复原。
开启形式
在redis.conf
文件中,能够找到上述配置项。将选项appendonly
设为yes
即可开启AOF日志,appendfilename
设置了日志文件名称。appendfsync
配置了以何种策略来记录日志,有3个选项:
- always: 每执行一条记录,就记录到aof文件中
- everysec: 每1秒记录一次
- no: 不被动去记录,依附操作系统来进行
always
会来带资源的耗费,尤其在业务高峰期,写操作过多的状况下对性能有较大的影响;no
对性能的影响最小,但如果Redis主机宕机,而操作系统还没有对命令刷盘的状况下,失落的数据想比拟会最多;everysec
每秒操作一次,所以即便服务呈现故障也只会失落1s的数据,是对性能和数据可靠性的一种均衡,所以举荐选用此种策略。
文件内容
AOF日志保留的是一条条操作命令,而不是间接的数据。文件以上图中的格局来进行命令的追加:
- *2:示意此条命令有2局部组成
- $6:示意有6个字节
应用AOF形式能够在Redis宕机后,通过逐条执行命令达到数据的复原。但随着命令越来越多,文件会越来越大。追加操作会耗费肯定的磁盘IO,同时复原数据时也会须要更多的工夫。
因为是记录每一条记录,所以针对同一个数据会有很多冗余的操作,这时就须要一种机制来对日志进行优化,升高文件的大小,减速数据的复原。