Redis持久化

Redis是基于内存的,如果不想办法把数据保存到硬盘上,一旦Redis出现故障(退出/故障),内存数据将全部丢失

  • 我们肯定不想Redis里面的数据由于某些故障全部丢失(导致请求都走DB),即便发生了也希望可以将Redis数据全部恢复过来,这就是持久化的作用

Redis提供了两种持久化方案

  • RDB(基于快照):将某一时刻的所有数据保存到一个RDB文件
  • AOF(Append-only-file):当Redis服务器执行写命令的时候,将执行的写命令保存到AOF文件

1.1 RDB(快照持久化)

RDB持久化可以手动执行,也可以根据服务器配置定期执行。RDB持久化生成的是一个经过压缩的二进制文件,Redis可以通过这个文件还原数据库的数据

有两个命令可以生成RDB文件:

  • SAVE阻塞Redis服务器进程,服务器不能接受任何请求,知道RDB文件创建完毕为止
  • BGSAVE创建出一个子进程,由子进程来负责创建RDB文件,服务器进程可以继续接受请求

Redis服务器在启动的时候,如果发现有RDB文件,就会自动载入RDB文件(不需要人工干预)

  • 服务器在载入RDB文件过程中,会处于阻塞状态,直到载入工作完成

除了手动调用SAVE或者BGSAVE命令生成RDB文件之外,我们还可以通过配置的方式定期执行:
在默认的配置下,如果以下条件被触发,就会执行BGSAVE命令

    save 900 1          #在900秒(15分钟)之后,至少有1个key发生变化,
    save 300 10         #在300秒(5分钟)之后,至少有10个key发生变化
    save 60 10000       #在60秒(1分钟)之后,至少有10000个key发生变化
复制代码

总结:通过手动调用SAVE或者BGSAVE命令或者配置条件触发,将数据库某一时刻的数据快照,生成RDB文件实现持久化

1.2 AOF(文件追加)

  • AOF是通过保存Redis服务器所执行的写命令来记录数据库的数据

AOF持久化功能的实现可以分为3个步骤:

  • 命令追加:命令写入aof_buf缓冲区
  • 文件写入:调用flushAppendOnlyFile函数,考虑是否要将aof_buf缓冲区写入AOF文件中
  • 文件同步:考虑是否将内存缓冲区的数据真正写入到硬盘

flushAppendOnlyFile函数的行为由服务器配置的appendfsyn选项来决定的:

    appendfsync always     # 每次有数据修改发生时都会写入AOF文件。
    appendfsync everysec   # 每秒钟同步一次,该策略为AOF的默认策略。
    appendfsync no         # 从不同步。高效但是数据不会被持久化。
复制代码

声明:本文仅为个人摘抄整理,作为以后回顾使用。若有错误,请指正

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值