Redis持久化机制

由于Redis的数据都保存在内存中,所以它能提供高性能的缓存服务。但内存中的数据是非常容易丢失的,所以Redis提供了持久化机制来保障数据的安全

Redis持久化有2钟方式:快照(RDB)和日志(AOF)

RDB快照

RDB(Redis DataBase)是指Redis使用savebgsave命令保存Redis在某一时刻的数据,在出现故障恢复后通过导入RDB文件来实现原有数据的恢复

开启方式
命令行中启动

使用savebgsave生成RDB文件
Redis持久化机制_第1张图片
save与bgsave的区别:

  • save会阻塞进程,在RDB文件没有生成结束前,会影响应用程序对Redis的写操作
  • 执行bgsave时,主进程会fork出一个子进程用来生成RDB文件,所以不会阻塞主进程
配置文件

Redis持久化机制_第2张图片
打开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持久化机制_第3张图片
redis.conf文件中,可以找到上述配置项。将选项appendonly设为yes即可开启AOF日志,appendfilename设置了日志文件名称。
appendfsync配置了以何种策略来记录日志,有3个选项:

  • always: 每执行一条记录,就记录到aof文件中
  • everysec: 每1秒记录一次
  • no: 不主动去记录,依靠操作系统来进行

always会来带资源的消耗,尤其在业务高峰期,写操作过多的情况下对性能有较大的影响;no对性能的影响最小,但如果Redis主机宕机,而操作系统还没有对命令刷盘的情况下,丢失的数据想比较会最多;everysec每秒操作一次,所以即使服务出现故障也只会丢失1s的数据,是对性能和数据可靠性的一种平衡,所以推荐选用此种策略。

文件内容

Redis持久化机制_第4张图片
AOF日志保存的是一条条操作命令,而不是直接的数据。文件以上图中的格式来进行命令的追加:

  • *2:表示此条命令有2部分组成
  • $6:表示有6个字节

使用AOF方式可以在Redis宕机后,通过逐条执行命令达到数据的恢复。但随着命令越来越多,文件会越来越大。追加操作会消耗一定的磁盘IO,同时恢复数据时也会需要更多的时间。
由于是记录每一条记录,所以针对同一个数据会有很多冗余的操作,这时就需要一种机制来对日志进行优化,降低文件的大小,加速数据的恢复。

你可能感兴趣的:(redis)