Redis持久化机制

AOF 只追加文件

按照操作顺序依次将操作添加到指定的日志文件当中,特点是数据安全性相对较高,缺点是所有操作全部记录。

AOF和RDB一样使用了写时复制机制,AOF默认为每秒钟fsync一次,最多丢失一秒钟的数据,文件大小要大于RDB格式的文件。

RDB 快照

RDB(Redis DataBase):基于时间的快照,默认只保留当前最新的一次快照,特点是执行速度比较快,缺点是可能会丢失从上次快照到当前时间点之间未做快照的数据。

Redis 提供了两个命令来生成 RDB 快照文件:

  • save: 同步保存操作,会阻塞 Redis 主线程;
  • bgsave: 默认选项,fork 出一个子进程,子进程执行,不会阻塞 Redis 主线程。使用写时复制机制,子进程将内存的数据保存为一个临时文件,当数据保存完成后再将上一次保存的RDB文件替换掉。

RDB 和 AOF 的混合持久化

如果把混合持久化打开,AOF 重写的时候就直接把 RDB 的内容写到 AOF 文件开头。这样做的好处是可以结合 RDB 和 AOF 的优点, 快速加载同时避免丢失过多的数据。当然缺点也是有的, AOF 里面的 RDB 部分是压缩格式不再是 AOF 格式,可读性较差。

如何选择 RDB 和 AOF?

RDB的优势:

  • RDB 文件存储的内容是经过压缩的二进制数据, 保存着某个时间点的数据集,文件很小,适合做数据的备份,灾难恢复。
  • 使用 RDB 文件恢复数据,直接解析还原数据即可,不需要一条一条地执行命令,速度非常快。

AOF的优势:

  • RDB 的数据安全性不如 AOF,没有办法实时或者秒级持久化数据
  • AOF 以一种易于理解和解析的格式包含所有操作的日志。

总结

  • Redis 保存的数据丢失一些也没什么影响的话,可以选择使用 RDB。
  • 不建议单独使用 AOF,因为时不时地创建一个 RDB 快照可以进行数据库备份、更快的重启以及解决 AOF 引擎错误。
  • 如果保存的数据要求安全性比较高的话,建议同时开启 RDB 和 AOF 持久化或者开启 RDB 和 AOF 混合持久化。

Redis 和 Memcached 的区别和共同点

共同点:

  • 都是基于内存的数据库,一般都用来当做缓存使用
  • 都有过期策略
  • 性能都非常高

区别:

  • 数据类型:Redis 支持更丰富的数据类型(支持更复杂的应用场景),Memcached 只支持最简单的 k/v 数据类型
  • 数据持久化:Redis 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,而 Memcached 把数据全部存在内存之中。也就是说,Redis 有灾难恢复机制而 Memcached 没有。
  • 集群模式支持:Memcached 没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据;但是 Redis 自 3.0 版本起是原生支持集群模式的。
  • 线程模型:Memcached 是多线程,非阻塞 IO 复用的网络模型;Redis 使用单线程的多路 IO 复用模型。 (Redis 6.0 针对网络数据的读写引入了多线程)。
  • 特性支持:Redis 支持发布订阅模型、Lua 脚本、事务等功能,而 Memcached 不支持。并且,Redis 支持更多的编程语言。
  • 过期数据删除:Memcached 过期数据的删除策略只用了惰性删除,而 Redis 同时使用了惰性删除与定期删除。

参考文献:

  1. JavaGuide
posted @ 2024-12-13 15:23  千千菌  阅读(4)  评论(0编辑  收藏  举报