redis两种持久化的方式,rdb(redis database)和aof(append of only)
介绍
redis 是一个键值对存储数据库,基于内存存储,相对于传统基于磁盘做持久化的数据库,操作内存速度更快。所以也用来做缓存服务器。相对于memcache,redis提供了持久化的解决方案,数据安全性更高。
redis提供的两种持久化方案,一个rdb(redis database),一个是aof(append of only),本文将详细介绍这两种持久化。
SNAPSHOTTING rdb(redis database)
介绍
rdb就是将redis内存中的数据做一个快照,经过压缩,以二进制文件的形式,保存到磁盘中。
默认情况下,Redis以异步方式将数据集转储到磁盘上
相关命令
- SAVE:阻塞redis的服务器进程,直到RDB文件被创建完毕。
- BGSAVE:派生(fork)一个子进程来创建新的RDB文件,记录接收到BGSAVE当时的数据库状态,父进程继续处理接收到的命令,子进程完成文件的创建之后,会发送信号给父进程,而与此同时,父进程处理命令的同时,通过轮询来接收子进程的信号。
恢复
在redis启动的时候,会检查是否rdb的二进制文件。有二进制文件,直接将文件拉取到内存中。恢复速度很快。
配置
1 | ############################### SNAPSHOTTING ################################ |
APPEND ONLY MODE aof(append of only)
介绍
如果rdb过程中,机器出了问题,可能会丢失几分钟的数据。
aof功能类似于日志,会对每一条记录做记录,三种持久化的方案:
- 每条记录都记录,但是会占用大量io,会把服务器拖慢
- 每秒钟的数据写入磁盘,将一秒钟的数据写入磁盘,可能会丢失一秒钟的数据(官方默认的方案)
- 不写入,只有命令执行的时候,才写入,会有很好的性能,但是丢失数据的风险非常大。
aof每条都记录,随着一直写入request,会导致aof文件会越来越大,并且在恢复的时候,每条都会执行
可以使用aof重写,可以多条记录逆为一条命令,减小文件大小
例子:1
2
3
4
5
6
7
8// 重写前
set wang 100
incr wang
incr wnag
// 重写后,逆为key最后的状态值
set wang 102bg
相关命令
- bgrewriteao:重写aof文件
恢复
在开启aof持久化的时候,会监测是否有aof文件,优先加载aof文件,然后在监测rdb文件。
重写后的aof文件更便于恢复,不用每条都写入,直接写入最后的状态值。
配置
1 | ############################# APPEND ONLY MODE ############################### |