redis 持久化

redis 的持久化有两种方式:rdb全量持久化和aof增量持久化;

AOF优先级更高,在AOF开启状态下,且存在AOF文件,优先使用AOF恢复数据 ;

RDB

命令

  • save 在主进程中执行任务,会阻塞服务器
  • bgsave 在子进程中执行任务,非阻塞

生成

  • 手动执行命令
  • 配置文件,save后的数字表示多少秒内对数据库进行了几次修改:
    • save 900 1
    • save 300 10
    • save 60 10000

载入

服务器启动时,若未开启AOF持久化,则自动加载rdb文件进行数据恢复;

AOF - Append Only File

配置

通过配置文件中的配置项进行开启AOF功能:

  • appendonly yes ## 开启aof持久化
  • appendfilename "aofname.aof" ## aof文件的文件名
  • appendfsync everysec ## 每个事件循环中,是否将aof缓冲区中的内容写入并同步到aof文件,选项见下文

实现:

  • 命令追加: 服务器执行完写命令后,会以协议格式将命令追加到服务器状态的aof_buf缓冲区;
  • 文件写入: redis事件循环中,每次处理完IO事件和时间事件后,会考虑是否要将aof_buf中的内容写入到aof文件中,该行为由 appendfsync配置选项控制
    • always 每个事件循环都会将aof_buf中的内容写入并同步到aof文件
    • everysec 将aof_buf中的内容写入文件,并判断上次同步的时间,超过一秒(默认)就同步
    • no 将aof_buf中的内容写入到文件,何时同步由操作系统决定
  • 文件同步

AOF 重写

因为aof文件中记录的是所有写命令,因此数据频繁变化时冗余较大,为解决此问题,引入aof重写功能;

aof重写并不分析aof文件,而是依据当前的数据快照生成写命令,替换掉原来的aof文件;

aof由子进程在后台重写,带来新的问题,在重写期间产生的新的写命令,会造成数据库与aof文件中的数据不一致;为此,redis 设置了一个aof缓冲区,这个缓冲区在创建执行重这与任务的子进程创建后启用,当redis执行完命令,会同时发送给aof缓冲区和aof重写缓冲区;

转载于:https://my.oschina.net/u/2407208/blog/3010160

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值