文章目录
- [Redis 持久化](#Redis 持久化)
Redis 持久化
Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失,所以 Redis 提供了持久化功能。
RDB(Redis Database)
什么是 RDB?
在指定的时间间隔内,将内存中的数据集快照写入磁盘,也就是 Snapshot 快照,它恢复时是将快照文件直接读到内存里。
- Redis 会单独创建(fork)一个子进程来进行持久化,会现将数据写入到一个临时文件中,待持久化过程结束,再用这个临时文件替换上次持久化好的文件。
- 整个过程,主进程是不进行任何 IO 操作的,这就确保了极高的性能。
- 如果需要进行大规模的数据恢复,且对于数据恢复的完整性不是非常敏感,那 RDB 方式要比 AOF 模式更加的高效。
- RDB 模式的缺点是,最后一次持久化的数据可能会丢失(最后一次持久化的时候宕机了)。
- 默认就是 RDB 模式。
- RDB 保存的文件是 dump.rdb。
测试
测试,60s 内修改了 5 次 key,就会触发 RDB 操作。
修改完配置文件,调用 save 命令保存即可。
bash
127.0.0.1:6379> save
OK
触发机制
- save 命令的规则满足的情况下,会自动生成 RDB 文件;
- 执行 flushall 命令,也会产生 RDB 文件;
- 退出 Redis,也会生成 RDB 文件。
备份就会自动生成一个 dump.rdb 文件。
如何恢复 RDB 文件
只需将 RDB 文件放在 Redis 的启动文件目录下,Redis 启动会自动检查 dump.rdb 并恢复其中的数据。
查看需要存在的位置:
bash
127.0.0.1:6379> config get dir
1) "dir"
2) "/usr/local/redis/redis-stable/src" # 如果在这个目录下存在 dump.rdb 文件,Redis 启动就会恢复其中的数据
RDB 优缺点
优点:
- 适合大规模的数据备份和恢复;
- 如果对数据的完整性要求不高,就可以使用 RDB。
缺点:
- 需要一定的时间间隔进行操作,如果 Redis 意外宕机了,这个最后一次修改的数据就没了;
- fork 进程的时候,会占用一定的内存空间!
AOF(append only file)
什么是 AOF?
将我们的所有命令都记录下来,好比一个 history,恢复的时候把这个文件里面的命令重新执行一遍。
- AOF 保存的是 appendonly.aof 文件。
- AOF 默认不开启,需要手动进行配置。
- 配置完成后,重启就会生效,就会生成 appendonly.aof。
修复 aof 文件(redis-check-aof)
如果这个 aof 文件有错误,这时候启动 redis 会报错,需要修复这个 aof 文件。Redis 提供了修复工具:redis-check-aof。
bash
./redis-check-aof --fix appendonly.aof
重写机制
如果 AOF 文件大于 64m,Redis 就会 fork 一个子进程对我们的 AOF 文件进行重写。
AOF 的优点和缺点
优点:
- 每一次修改都同步,文件完整性更高;
- 默认每秒同步一次,可能丢失一秒的数据。
缺点:
- 相对于数据文件来说,AOF 远大于 RDB,修复的速度也比 RDB 慢;
- AOF 是一个读写操作,所以运行效率要比 RDB 慢。