Redis09_持久化之RDB操作
Redis 是一个内存数据库,读写效率比传统数据库要快的多,但缺点是,一旦断电或者宕机,那么内存数据库中的数据将会全部丢失。
因此Redis提供了将内存数据持久化到硬盘,以及用持久化文件来恢复数据库数据的功能。支持以下两种形式的持久化:
- RDB快照(snapshotting)(默认)
- AOF(append-only-file)
RDB快照(snapshotting)
RDB是在指定时间间隔内把当前内存中的数据集快照写入磁盘,也就是 Snapshot 快照(数据库中所有键值对数据)。恢复时是将快照文件直接读到内存里。
RDB 有 自动触发 和 手动触发 两种触发方式
自动触发:在 redis.conf 配置文件中的 SNAPSHOTTING 下有如下默认配置:
save 900 1 # 表示900秒内数据集存在1次修改则自动触发bgsave
save 300 10 # 表示300秒内数据集存在10次修改则自动触发bgsave
save 60 10000 # 表示60秒内数据集存在10000次修改则自动触发bgsave
dbfilename dump.rdb # 设置快照的文件名
触发规则:
1. 满足save的规则
2. 执行了flushall命令
3. 正常redis关机
恢复rdb文件:
127.0.0.1:6379> config get dir
1) "dir"
2) "/usr/local/bin"
将dump.rdb文件放置在以上目录即可,redis启动时会自动恢复其中的数据。
RDB适用于大规模的数据恢复和对数据完整性要求不高的场景
缺点是需要一定的时间间隔进行操作,如果意外宕机,最后一次修改的数据会丢失
AOF(append-only-file)
AOF是记录下所有执行过的写操作命令,恢复的时候重新执行(效率低)
在 redis.conf 配置文件中的 APPEND ONLY MODE 下有如下默认配置:
appendonly no #AOF默认是关闭的,开启需要修改为 yes
appendfilename "appendonly.aof" #默认生成的文件名为 appendonly.aof
#appendfsync always #每一次修改都同步,数据的完整性更好
appendfsync everysec #每一秒写入一次aof文件,可能会丢失1s的数据
#appendfsync no #由操作系统决定同步,效率最高
如果 appendonly.aof 文件有误将不能成功启动 redis,可以通过 redis-check-aof 工具修复该文件:
redis-check-aof --fix appendonly.aof
AOF的缺点:
aof 数据文件一般远远大于 rdb 文件,修复速度慢!
aof 的运行效率比 rdb 慢