Redis的两种持久化方案简介与对比

Q:为什么Redis要持久化?

A:Redis的高性能是因为其使用了内存来储存数据,而RAM有易失性,所以在服务器宕机或断电后会导致Redis储存在其中的数据丢失。Redis也提供了持久化数据的方案。

Q:为什么我不设置持久化也能在重新打开Redis服务时恢复之前的数据?

A:因为Redis已默认启用了一种持久化方案。


下面是两种方式的介绍

(conf文件里对应的配置部分有着对应的参数解释)

RDB方式(Redis database)

经过一定时间后,将内存数据的快照写入到磁盘中

优点:

  1. 备份里只包含一个文件,便于备份的归档管理
  2. 节省磁盘空间
  3. 数据库恢复速度快

缺点:

  1. 数据完整性问题(系统有可能在进行持久化前发生宕机)
  2. 速度下降问题(数据量过大时可能导致服务器停顿)

如何启用:

  • 打开redis的conf文件
    • windows下为redis.windows.conf
    • Linux下为redis.conf
       
      找到SNAPSHOTTING下的
    # like in the following ...
    # ...
    # save ""
    
    save 900 1
    (900秒内至少有1条key发生变化,就写一次快照,下二同理)
    save 300 10
    save 60 10000
    

AOF方式(Append only file)

以日志的形式记录数据库处理的每一个操作,在Redis服务重启时将日志读入,执行每一条命令,重建数据库。由于是追加的形式写入到日志文件里,当文件大小超过了设置的阈值,会压缩日志文件,保留仅可以恢复的日志。

优点:

  1. 备份机制更为安全
  2. 可读性高的日志文件,便于恢复,处理错误等

缺点:

  1. 相比RDB的方式对磁盘的开销更大
  2. 备份速度较慢(备份频率相对更高,也更安全)

如何启用:

  • 打开redis的conf文件

    • windows下为redis.windows.conf
    • Linux下为redis.conf
      找到APPEND ONLY MODE下的
    # AOF and RDB ...
    # ...
    # Please ...
    
    appendonly no
    (AOF默认未启用,要使用则将no改为yes)
    
    # The name ...
    appendfilename "appendonly.aof"
    (这是AOF产生的日志文件的文件名)
    (与redis-server.exe等文件存于同一个目录下)
    
    # The fsyn() call ...
    # ...
    # If unsure ...
    
    # appendfsync always(每次更新同步更新日志)
    appendfsync everysec(默认给你选这个)
    # appendfsync no(不同步)
    (要打开哪个就去掉之前的#号)
    
    # Specify a percentage of zero in order to disable the automatic AOF 
    # rewrite feature.
    
    auto-aof-rewrite-percentage 100
    (超出了这个百分比就重写)
    auto-aof-rewrite-min-size 64mb
    (重写出的文件不应小于64mb,和上面的条件共同控制是否进行rewrite这个操作)
    

RDB和AOF哪个好

  1. 官方推荐都启用
  2. 对数据不敏感,单独用RDB
  3. 不建议单独使用AOF
  4. 若作为纯缓存使用,可以都不开启

官方的文档:Redis Persistence

参考的博客:介绍Redis的各种用途以及使用场景


猜你喜欢

转载自blog.csdn.net/JikeStardy/article/details/90552409