美文网首页
Redis持久化机制ADB和AOF

Redis持久化机制ADB和AOF

作者: 不ji的石头 | 来源:发表于2021-11-12 21:07 被阅读0次

RDB:

有save和bgsave两种方式

  • save:会使redis处于阻塞状态,直到RDB完成,才会继续响应其它的命令.对redis性能影响非常大.
  • bgsave:在时间间隔内fork⼀个⼦进程将内存中的数据集快照写⼊磁盘,先将数据集写⼊临时⽂件,写⼊成功后,再替换之前的⽂件,用二进制压缩存储。redis只会在fork一个子进程的时候占用一点点时间.

RDB优点:

  • 整个Redis数据库将只包含⼀个文件 dump.rdb,还是经过压缩的二进制文件,占用空间很小,方便持久化。
  • 保存了 Redis 某个时间点的数据集,很适合用于做备份。
  • 性能最大化,子进程来进行持久化,主进程不会进⾏任何 IO 操作,保证了 redis 的高性能 .
  • 相对于数据集⼤时,比AOF 的启动效率更高。

RDB缺点:

数据安全性低。如果持久化的时候redis 发生故障,会丢失最后一次持久化的数据,所以这种方式更适合数据要求不高的时候.

fock子进程过程中redis也是不能执行操作的,所以进行RDB操作的时间间隔一定不能太短.而且,如果当数据集较大时,也可能会导致整个服务器停止服务⼏百毫秒,甚至是秒级。

AOF:

以日志的形式记录服务器所处理的每⼀个写、删除操作,查询操作不会记录,以文本的方式记录,不断追加,可以打开⽂件看到详细的操作记录 .

三种追加方式(fsync):

  • everysec :每秒同步:异步完成,先将操作写入一个缓存,每秒从缓存同步到磁盘一次,效率高,但是可能丢失数据.
  • always:每修改同步:每一次发生增删改都记录操作.数据安全性高,最多丢失一个操作.
  • no:不同步,把操作写入缓存,由操作系统来决定什么时候写入磁盘.

AOF优点:

  • AOF 比 RDB可靠。你可以设置不同的 fsync 策略:no、everysec 和 always。默认是 everysec,在这种配置下,redis 仍然可以保持良好的性能,并且就算发生故障停机,也最多只会丢失一秒钟的数据。
  • 通过 append 模式写件,即使日志因为某些原因而包含了未写入完整的命令(比如写入时磁盘已满,写入中途停机等等),可以通过 redis-check-aof 工具修复这个问题。
  • AOF 机制的 rewrite 模式。定期对AOF文件进行重写,以达到压缩的目的(比如有先有一个set age 21,后面又有一个set age 22,则前面哪个set重写后会被清楚).

AOF缺点

  • 相同的数据集,AOF 文件的大小一般会比 RDB 文件大,且恢复速度慢。
  • 数据集⼤的时候,比rdb 启动效率低。
  • 运行效率没有RDB高,AOF文件比RDB更新频率高,
    总结:优先使用AOF还原数据,AOF比RDB更安全也更大,RDB性能比AOF好, 如果两个都配了优先加载AOF。

相关文章

网友评论

      本文标题:Redis持久化机制ADB和AOF

      本文链接:https://www.haomeiwen.com/subject/khwmzltx.html