> 文档中心 > Redis数据持久化

Redis数据持久化



本篇博文目录:

      • 1.什么是数据持久化
      • 2.数据持久化方式
      • 3.Redis数据持久化-RDB
        • (1) 触发RDB的方式
        • (2) RDB的缺点
      • 4.Redis数据持久化-AOF
        • (1) 日志追加- AOF
        • (2) 日志恢复
        • (3) AOF的追加(fsync)策略
        • (4) AOF三种方式对比
        • (5) AOF重写
        • (6) AOF的实现方式
      • 5.RDB与AOF的选择

1.什么是数据持久化

Redis所有数据保存在内存中,如果不做任何持久化操作当Redis关闭时数据会丢失,数据持久化就是为了防止数据丢失,Redis会异步将数据保存在硬盘上。

Redis数据持久化

2.数据持久化方式

  • RDB(快照方式)

Redis数据持久化

  • AOF(写日志方式)

Redis数据持久化

3.Redis数据持久化-RDB

Redis将数据已二进制形式保存到磁盘中,保存的文件后缀为rdb,下次启动的时候载入rdb文件恢复数据,从而实现持久化。

Redis数据持久化

(1) 触发RDB的方式

  • 自动方式

通过在配置文件进行相关配置,Redis根据配置的情况进行自动持久化。

RDB的配置项信息:

Redis数据持久化
进入到配置文件所在目录,并通过Vim命令进行编辑
Redis数据持久化
RDB配置信息如下:
Redis数据持久化
详细配置信息:

save 60 1dbfilename dbdump.rdbdir /usr/local/redis-6.0.6/stop-writes-on-bgsave-error yesrdbcompression yesrdbchecksum yes

备注:save 60 1 表示60s内有一个key变化就保存,这是一种策略,同时可以设置多个策略,如下:

Redis数据持久化

启动Redis服务端:
Redis数据持久化
通过RDM中在db2数据库添加一条key = Java value=best!的数据
Redis数据持久化

Redis数据持久化
我们会发现Redis目录下多了一个dbdump.rdb的文件

Redis数据持久化
通过Vim 查看dbdump.rdb文件,会发现里面有数据,但是是乱码,可以理解因为Redis通过二进制进行保存
Redis数据持久化
.
Redis数据持久化
将Redis服务端关闭,然后再次启动观察数据是否依然存在:
Redis数据持久化
我们会发现数据任然存在,数据持久化成功!
Redis数据持久化

  • 手动方式

当要进行持久化的时候,输入save或bgsave命令进行持久化( 都是单线程阻塞,意思就是在执行保存的时候不能执行其他命令 ),save和bgsave命令本质上差不多,一个在前台运行一个在后台运行,都是单线程阻塞。

Redis数据持久化
Redis数据持久化

(2) RDB的缺点

Redis数据持久化

4.Redis数据持久化-AOF

使用日志的方式追加保存我们每一步操作的命令到磁盘中,这里实际保存的格式并不是命令格式,而是一种特定的格式,文件后缀为AOF,数据恢复的时候将AOF文件载入。

(1) 日志追加- AOF

Redis数据持久化

(2) 日志恢复

Redis数据持久化

(3) AOF的追加(fsync)策略

appendfsync 追加策略(如:appendfsync everysec)

Redis数据持久化

(4) AOF三种方式对比

Redis数据持久化

(5) AOF重写

只关心最后的状态,保存当前最新状态所执行的命令,例如下表中的set hello world ,set hello java 和set hello hehe命令最后的状态为set hello hehe命令所执行的状态,所以这三条命令只保存set hello hehe命令,其他命令也是同样的道理,所以最后AOF重写后保存的命令为set hello hehe ,set counter 2 和rpush mylist a b c这三条命令。

Redis数据持久化

(6) AOF的实现方式

  • 自动方式(使用AOF重写配置方式)

AOF重写配置选项如下:
Redis数据持久化

先关闭Redis服务端:
Redis数据持久化

然后通过vim命令编辑Redis的配置文件,新增Aof的配置:
Redis数据持久化
详细配置信息:

appendonly yesappendfilename aof-6666.aofappendfsync everysecno-appendfsync-on-rewrite yesauto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mb

再次启动Redis服务端:
Redis数据持久化
通过RDM添加往数据库2添加一条数据key=PHP value=Java
Redis数据持久化
我们会发现Redis目录下多了一个aof-6666.aof的文件
Redis数据持久化
我们通过vim命令查看该文件:
Redis数据持久化

关于rewrite说明
Redis数据持久化

  • 手动方式(使用bgrewriteaof命令方式)

Redis数据持久化

5.RDB与AOF的选择

( AOF的加载优先级相较于RDB更高 )
Redis数据持久化

开发者涨薪指南 Redis数据持久化 48位大咖的思考法则、工作方式、逻辑体系