redis缓存持久化方式

Redis有两种存储方式:持久化和非持久化。

Redis非持久化需要配置,Redis在安装时默认开启持久化功能,如果仅把Redis内存缓存使用(非持久化),不如考虑APCU或者Memcache。

Redis的持久化分为两种方式,这两种方式分别是RDB(默认启动)和AOF

RDB的备份时通过快照来完成的,具体来说是将符合设定条件的Redis在硬盘中生成一份副本文件并保存在硬盘中。

AOF是将每次的命令追加到硬盘文件中,当服务器出现了故障的时候,从文件中读取丢失数据时间点之后的命令,并且重新执行一遍。

RDB的实现方式分为多种,分别是:

1.SAVE(同步)和BGSAVE(异步)命令

BGSAVE是在后台执行异步操作,但是他每一次都会返回OK,这个OK不是快照存储成功,而是快照执行成功,所以并不知道快照是否成功,想要知道的话还需要执行lastsave的命令

2.根据配置文件执行

3.执行关闭Redis时执行

4.主从复制的时候执行

AOF的实现方式是按纯文本的方式记录了Redis执行的命令,实现方式分别问手动触发和自动触发,自动触发需要配置两个协议

对比

 

 

持久化方式

 

RDB

 

AOF

 

占用空间

 

 

 

存储速度

 

 

 

恢复速度

 

 

 

数据安全

 

会丢失数据

 

基本上不会

 

资源消耗

 

 

 

启动优先级

 

 

 

RDB/AOF恢复数据方式是将备份文件(dump.rdb)移动到安装目录并且修改redis的配置参数,然后启动服务即可。此外REIDS允许RDB以及AOF同时使用。

RDB丢失数据是因为每次快照是存在间隔时间的,AOF会丢失数据是因为他把文件村硬盘中,但是系统默认是30秒执行一次同步操作,除非在配置中设置appendfsync参数。这个参数有三种,一种是总是,一种是每秒同步一次(默认),一种是不主动同步。

RDB创建子进程时,会对父进程进行完全拷贝,导致在创建子进程时会消耗大量的时间。而AOF虽然也会创建子进程,但是他并不会完全拷贝父进程,而是该子进程只需要能够将父进程之前执行过的指令添加AOF缓冲区和重写缓冲区即可。因此存储速度来说RDB更慢一些,资源消耗更高一些。而RDB存储的是文件快照,并且是压缩级的;而AOF存储的是操作指令,一个数据可能有很多个指令,所以空间占用来说AOF更大一些。

posted @ 2021-12-24 10:37  枫楓枫  阅读(232)  评论(0编辑  收藏  举报