首页 > 中间件 > redis的持久化方式

redis的持久化方式

作者:bin

RDB
RDB是生成一个压缩后的二进制文件保存数据

#900s 多于1次,进行RDB
save 900 1
save 300 10
save 60 10000
#保存名字
dbfilename dump.rdb
#保存路径
dir /usr/local/Cellar/redis/5.0.7/db/

1.使用命令save或者bgsave可以进行主动保存,前者会阻塞redis任务。
2.服务启动时,如果检测到有RDB文件,并且在AOF方式处于关闭下,他会自动载入RDB文件。
3.自动保存间隔,可以配置成更新频率方式,例如900s 更新了10次redis记录,那么进行一次RDB
4.redis会维护一个dirty计数器和lastsave时间,dirty会在每次RDB后清空
5.redis检查的频率是100ms做一次上面的检查

RDB的数据结构:
length-encoding存过期时间、value-type存类型、key-value存键值对

AOF
AOF是一种类似于mysql的二进制日志的方式,将redis执行的命令都保存下来

#保存方式
appendfsync always
#保存名字
appendfilename appendonly.aof
#保存路径
dir /usr/local/Cellar/redis/5.0.7/db/

1.appendfsync保存方式支持3种
always:每次都将修改到缓冲区的内容写入文件
everysec:每隔着1秒将缓冲区内容写入文件
no:让系统自己判断,啥时候写
2.服务器启动时,检测到如果有aof文件,那么就会使用一个伪客户端,去执行这个写文件
3.aof文件过大,可以使用命令

bgrewriteaof

进行后台重写命令
重写其实就是从redis内存中下下载一遍数据,因为例如sadd这样的命令当初是一条一条加进去的,直接从redis内存中取的话,那就可以做合并操作,即压缩了大小,并且不会有任何的浪费

RDB-AOF混合持久化:
RDB恢复容易丢数据,AOF恢复又太慢?
redis 4.0之后,提供了混合持久化的选项
我们可以通过如下选项配置

aof-use-rdb-preamble yes  # yes:开启,no:关闭

开启选项后
先生成RDB内容,然后覆盖AOF文件,并且将增量的内容追加在AOF文件中,此时AOF文件实际上包含了历史数据的RDB和增量的AOF。
恢复时,先恢复AOF文件中的RDB内容,在恢复增量内容,这样就兼顾了速度与一致性。

您必须 [ 登录 ] 才能发表留言!