Redis持久化之RDB与AOF的区别

一、RDB:半持久化模式,也称为“快照模式”。

Redis在RDB模式下,会在指定的时间间隔内,检测到对redis数据库有对应次数的写入操作时,会触发一次持久化(I/O存储),它是Redis默认开启的持久化模式。RDB持久化是将数据库中的数据以二进制压缩格式保存在本地磁盘中(相当于数据复制,有点像Java中的序列化操作)。

redis.windows.conf 配置文件中可以看到RDB的默认设置——900秒内检测到1次key的变化,触发生成dump文件、300秒内检测到10次key的变化......(不重复描述),保存dump文件的频率可以自定义,比如save 1 1,1秒内检测到1次变化触发dump,当然这样的频率开销很大,实际情况下不推荐这样改。

redis.windows.conf

RDB的工作模式是当触发持久化工作时,fork()一个子进程来执行I/O存储操作,主进程无需执行任何磁盘I/O的操作,可继续接收处理客户端的请求。

当然也可通过输入save与bgsave命令手动触发dump存储。save会阻塞当前主进程直至存储操作完成;而bgsave不会阻塞,它会fork()一个子进程来执行存储操作。


二、AOF:全持久化模式

是以日志形式记录对数据库的写操作的持久化模式,它默认设置每秒中对数据库的写操作做命令记录(命令记录以在文件末尾追加的方式),AOF持久化模式默认不开启,需要我们手动配置开启。

AOF持久化开启步骤:

1、修改redis.windows.conf :

redis.windows.conf

2、进入redis-server.exe目录下的cmd ,输入:redis-server.exe redis.windows.conf

cmd命令

如果只输入redis-server.exe 后面不跟配置文件,windows下对配置文件的加载就是默认的RDB模式(可能是不执行咱们修改过的 redis.windows.conf 配置文件)。

运行redis数据库后,可以看到文件夹中多了一个 appendonly.aof文件:

这个就是我们配置的aof命令日志文件,redis重启后可根据我们输入的命令来做数据恢复

接下来启动redis-cli.exe,执行一条写操作语句:HSET 1 vivo 1 :

大致还是看得懂追加的命令已经存储在了这个文件中

值得一提的是,如果不断的对appendonly.aof文件进行命令追加,那么必然引起.aof文件过大。此时主进程会fork()一个子进程来对旧的.aof文件进行压缩,压缩后的命令会放入一个新的.aof文件,主进程可以继续对来自客户端的命令进行持久化(主进程还是追加到旧的.aof文件中),当子进程压缩完成后,新的.aof文件会自动覆盖旧的.aof文件。

三、RDB 与 AOF 的区别总结

RDB是紧凑型文件,比AOF文件要小,它保存了某一个时间点数据库上的全部数据,恢复速度比AOF文件快(因为AOF需要先编译命令文件,然后执行;RDB则直接做数据解析迁移),持久化异步操作充分发挥了redis的性能

AOF是命令日志文件,它保存了用户每秒对数据库的所有写命令操作,对数据的维护安全性能更高(记录每秒的写操作,对比RDB的快照存储,顶多丢失1s的数据,而RDB可能会丢失几分钟的数据),但是在数据恢复上,需要先对日志命令文件进行读取处理再执行编译,效率上要比RDB直接迁移数据文件来得慢

你可能感兴趣的:(Redis持久化之RDB与AOF的区别)