redis持久化机制
一.RDB(Redis DataBase)
1.入门须知
- RDB是内存数据库,意味着如果服务器进程退出,而RDB的数据没有由内存保存到磁盘,则会丢失这部分数据,因而redis提供了持久化功能。
2.深入了解
- 配置路径:redis.conf-》##SNAPSHOTTING##(快照)
- 执行流程图:
- 流程说明:redis会单独创建一个子进程来进行持久化,先将数据写到一个临时文件,待持久化过程结束,再用这个临时文件替代上次持久化好的文件。整个过程中,主进程不进行任何IO操作,确保了高性能。缺点是最后一次持久化可能丢失数据。
- 原理:指定时间间隔内将内存中的数据集快照写入磁盘,它回复时是将快照文件直接读到内存里。
- 保存文件:dump.rdb(默认文件名),修改在redis.conf的如下处:
3.触发机制
-
save规则满足条件下,会自动触发rdb规则,下图即为save规则,位置在redis.conf的快照部分。解释:中间代表指定时间内,最右边代表修改次数。
-
执行flushdb时,也会触发rdb规则
-
退出redis,会产生rdb文件
4.恢复rdb文件
- 将rdb文件放在redis启动目录,则redis启动时会自动检查该文件并恢复数据
- 查看需要存在的位置
127.0.0.1:6379> config get dir
5.优缺点
- 优点:1.适合大规模数据回复;2.对数据完整性要求不高。
- 缺点:1.需要在时间间隔下进程操作,容易在发生意外时丢失数据;2.fork子进程会占用一定空间。
二.AOF(Append Only File)
1.执行流程
- 说明:以日志形式记录每一个写操作,将redis执行过的所有指令记录下来,只许追加文件不能修改文件。redis启动后会读取该文件重构数据,即redis重启时会根据日志文件内容将写命令从前到后执行一次以完成数据回复工作。
2.配置
- 配置位置:redis.conf
- 开启:
appendly yes
(默认为no) - 配置文件名:appendly.aof(默认)
- 配置策略:
1.appendfsync always #每次修改
2.appendfsync everysec #每秒修改
3.appendfsync no #不修改
3.错误记录
- 错误:appendonly.aof文件内容有误,将导致redis启动失败。
- 解决办法:利用
redis-check-aof --fix appendonly.aof
(注意得在redis-check-aof文件所在目录下执行命令,例如笔者的目录是bin)
缺点:
相对于数据文件来说,aof远大于rdb,修复速度也比rdb慢;而且运行效率比rdb低,因此经常默认配置的是rdb
三.扩展
1.同时开启这两种持久化方式
- 在这种情况下,redis重启时会优先载入AOF来恢复原始数据,因为通常情况下aof文件保存的数据比rdb文件保存的更完整。
- RDB文件数据不实时,同时开启这两种方式,服务器重启也会找aof文件,那是否只需要aof?建议是不要,rdb更适合备份数据库,快速重启,而且不会有aof可能潜在的Bug,可以防万一。
2.缓存场景
- 如果只希望在服务器运行时数据存在,可以不使用任何持久化。