1、啥是Redis持久化
持久化就是把内存中的数据存到硬盘中去,防止进程退出后数据丢失。
分析:redis 如果仅仅只是将数据缓存在内存里面,如果 redis 宕机了再重启,内存里的数据将全部丢失。为防止上述问题发生,就得用 redis 的持久化机制,将数据写入内存的同时,异步的将数据写入磁盘文件里,进行持久化。
如果 redis 宕机重启,自动从磁盘上加载之前持久化的一些数据就可以了,也许会丢失少许数据,但是至少不会将所有数据都弄丢。
2、Redis持久化的两种方式。
1、RDB(Redis DataBase)持久化机制
对 redis 中的数据执行周期性的持久化。
2、AOF (Append-only file)持久化机制
AOF 机制将每条写入命令作为日志,以 append-only 的模式写入一个日志文件中,
在 redis 重启的时候,可以通过回放 AOF 日志中的写入指令来重新构建整个数据集。
3、RDB介绍
3.1 原理及特点:
rdb功能的核心函数是rdbSave(生成RDB文件)和rdbLoad(从文件加载内存)两个函数。
RDB是把当前进程的快照数据保存到硬盘中,是二进制格式,有时会存在兼容问题。
Redis加载RDB来恢复数据,速度更快,而加载AOF会较慢。
RDB持久化是Redis默认的持久化方式。
无法做到实时持久化。RDB 数据快照文件,都是每隔 5 分钟生成一次,这个时候就得接受一旦 redis 进程宕机,那么会丢失最近 5 分钟的数据,如果想要在 redis 故障时,丢失数据量少,那么 RDB 没有 AOF 好。
4、AOF介绍
4.1 原理及优缺点
AOF功能的核心函数是 flushAppendOnlyFile
AOF 可以更好的保护数据不丢失,一般 AOF 会每隔 1 秒,通过一个后台线程执行一次fsync
操作,最多丢失 1 秒钟的数据,而RDB却丢失5分钟的数据。
每当执行服务器任务时,flushAppendOnlyFile 函数都会被调用, 这个函数执行以下两个工作完成写入->保存:
WRITE:根据条件,将 aof_buf 中的缓存写入到 AOF 文件
SAVE:根据条件,调用 fsync 或 fdatasync 函数,将 AOF 文件保存到磁盘中。
5、使用如何选择
1、还原数据时,优先使用AOF。
2、AOF更安全也更大
3、RDB性能更好
4、如果计算机两个都配了优先加载AOF