目录
传统数据库事务的ACID
Redis的持久化方案
持久化配置
①纯内存运行
②RDB模式
优缺点
临时文件
触发RDB规则的情况
如何恢复数据
③AOF模式
日志文件
优缺点
传统数据库事务的ACID
Redis的持久化方案
①在一定时间内,命令执行次数达到一定上限时,会生成一个文件,文件会不断覆盖,生成文件的IO操作少,但是可能会丢失数据。
②记录“写命令”
每行命令都记录 |
每秒记录一次命令 |
不记录(默认) |
Redis是操作完之后才进行AOF日志记录(只记录操作的指令记录)
持久化配置
Redis是否具备持久化,取决于其持久化配置。
①纯内存运行
不具备持久化,服务器一旦停机会导致数据丢失。
②RDB模式
取决于RDB策略,满足策略的情况执行持久化。
- 在指定的时间间隔对数据进行快照存储,恢复时会将快照文件直接读取到内存中。
- Redis会单独创建一个(fork)子线程进行持久化操作,将数据写入到一个临时文件中,等待持久化操作结束后,将这个临时文件替换上次的临时文件,这个过程不执行IO操作,能够保证极高的性能。
- 如果需要进行大批量的数据恢复,而且对数据恢复的完整性不非常敏感的话,RDB模式会比AOF模式更加高效。
优缺点
优点 | 适合大规模数据、对数据要求不高的场景 |
缺点 | 需要一定时间间隔进行操作 |
如果Redis意外宕机后,最后一次持久化后的数据可能会丢失 | |
fork线程会占用一定的时间与空间,因为它会产生临时文件 |
临时文件
RDB模式会产生临时文件的名字为:dump.rdb(在Redis启动目录下)
在redis.conf配置文件有规定RDB执行的规则:
默认:
# In the example below the behaviour will be to save:
# after 900 sec (15 min) if at least 1 key changed
# after 300 sec (5 min) if at least 10 keys changed
# after 60 sec if at least 10000 keys changed
触发RDB规则的情况
①满足sava规则的情况。
②执行flushall(清除所有库中的所有key)。
③退出Redis时。
如何恢复数据
将rdb文件放入Redis启动目录,Redis启动时会检查是否存在rdb文件,存在则恢复数据。
③AOF模式
程序会在执行命令/指令时将指令保存在硬盘上。【aop(追加)】
- 记录每次对服务器的写操作,当服务器重启时会重新执行这些命令恢复原有数据,将全部记录在恢复时执行一遍。
- 以日志的形式记录写入(set)操作,读(get)操作不记录,此日志文件尽可查看,如手动修改将损坏文件,即使使用redis-chek-aop.exe --fix修复工具进行修复也会缺失数据。
日志文件
日志的保存文件名是appendonly.aof
#appendonly yes 开启aof模式
#appendfsync always 每次都修改,消耗性能
#appendfsync everysec 每秒修改一次,可能会丢失1秒的数据
# appendfsync no 不开启aof模式
优缺点
优点:每次更新时同步,文件的完成性更好
缺点:相较与edb文件,恢复速度慢,效率不高