一.什么是持久化

持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。

二.RDB(Redis DataBase)

2.1RDB是Redis默认的持久化方式

按照一定的时间将内存中的数据以快照的形式保存到磁盘中去,对应产生的文件为dump.db。(可以在上一篇redis.conf中查看对应的save参数,save参数决定快照的周期)

redis strem流 使用 lettuce 报错_数据

2.2高性能

Redis会单独创建(fork)一个子进程来进行写操作,让主进程继续处理命令,所以是IO最大化。

使用单独子进程来进行持久化,主进程不会进行任何IO操作,保证了Redis的高性能。

2.3触发机制:

  1. save规则满足的情况下,会自动触发rdb规则
  2. 执行flushall命令,也会触发rdb规则
  3. 退出redis,也会产生rdb

2.4恢复rdb文件

  1. /usr/local/bin 下面的dum.rpd先保存起来
  2. flushall或者shutdown会发现数据丢失
  3. 把保存的dump.rpd放在bin下面重启,发现数据恢复了

redis strem流 使用 lettuce 报错_数据_02

redis strem流 使用 lettuce 报错_数据_03

优点:

  1. 只有一个dump.rdb,方便持久化
  2. 容灾性好,一个文件可以保存到安全的磁盘
  3. 性能最大化
  4. 相对于数据量大时,比AOF的启动效率更高

缺点:

  1. 数据安全性较低,需要一定的时间间隔进程操作,如果redis意发生故障,会发生数据丢失
  2. fork进程的时候,会占用一定的内存空间

三.AOF(Append Only File)

AOF持久化是将Redis执行的每次写命令记录到单独的日志文件中,

当重启Redis会重新将持久化的日志中文件恢复数据。

redis strem流 使用 lettuce 报错_RDB、_04

优点:

  1. 数据安全,aof持久化可以配置appendfsync属性,有always,每进行一次命令操作就记录到aof中去

sync。消耗性能

                appendfsync everysec # 每秒执行一次 sync,可能会丢失这1s的数据!

                # appendfsync no # 不执行 sync,这个时候操作系统自己同步数据,速度最快!

     

      3.AOF机制的rewirte模式。AOF文件没有被rewrite之前可以删除某些命令。

缺点:

  1. AOF文件比RDB文件大,且恢复速度慢。
  2. 数据量大的时候,比RDB启动效率低。

四.总结

  1. 使用AOF原因:AOF文件保存的数据集要比RDB文件保存的数据集完整,更新频率比RDB高,比RDB更安全更大,优先使用AOF还原数据,如果两个都配置优先加载AOF
  2. 使用RDB原因:可以承受数分钟以内的数据丢失,RDB性能比AOF好,RDB恢复速度比AOF快,RDB可以避免AOF程序的bug