Java学习 - Redis持久化

数据持久化

  • 数据持久化概念
    • 将redis存储在内存中的数据存储在硬盘中
    • 计算机不会因断电而造成数据丢失
  • 数据持久化方式
方式说明
RDB存储键值对【记录快照】
AOF存储操作命令【写日志】

RDB方式

RDB方式是什么
  • 备份:将内存中的数据保存在磁盘中的一个文件中
  • 恢复:根据磁盘中的文件,将数据写入内存中
RDB三种触发方式
  • save触发方式[同步]

    • 使用:redis-cli> save

    • 原理:在原线程上创建RDB文件

    • 运行图

                   save                  create 
      client ---------------> redis ---------------> RDB
      
    • 特点:阻塞式

  • bgsave触发方式[异步]

    • 使用:redis-cli> bgsave

    • 原理:先fork出子进程,然后在该子进程中

    • 运行图

                 1.bgsave                            正常服务
      client  -------------------------> redis ---------------------> clients
                    |                      ^  
                    |                      |
                2.fork()                   | 4.bgsave successfully
                    |                      | 
                    v        3.create      |
               redis子进程 ------------> RDB文件
      
    • 特点:fork进程的过程是阻塞的;子进程创建RDB是非阻塞的

  • 配置触发方式

    • 使用:根据配置文件自动调用bgsave

    • 原理:与bgsave方式相同

    • 运行图:与bgsave方式相同

    • 配置:

      # 配置redis.conf
      save 900 1     #900秒时间,至少有一条数据更新,则保存到数据文件中
      save 300 10    #300秒时间,至少有10条数据更新,则保存到数据文件中
      save 60 10000  #60秒时间,至少有10000条数据更新,则保存到数据文件中
      
save和bgsave对比
命令savebgsave
IO类型同步异步
是否阻塞是(阻塞发生在fork上)
复杂度O(n)O(n)
优点不会消耗额外内存不阻塞客户端命令
缺点阻塞客户端命令需要fork,消耗内存
RDB的相关配置
配置项配置说明
dbfilename dump.rdb配置RDB文件的名字
rdbcompression yes|no是否压缩RDB文件【推荐yes】
rdbchecksum yes|no是否开启检验和【推荐yes】
stop-writes-on-bgsave-error yes|no是否在出错时停止【推荐yes】
RDB存在的严重问题
  • 可能会丢数据
RDB三种自动触发时机
  • 全量复制
  • debug reload
  • shutdown

AOF方式

AOF方式是什么
  • 一种将内存中数据保存到本地硬盘中的持久化方式
  • AOF记录的不是数据本身,而是记录产生数据的命令
AOF三种触发方式
触发方式特点优点缺点
always每条记录都会将缓冲区写入硬盘基本不会丢失数据IO开销大
everysec每秒都会将缓冲区写入硬盘每秒1次可能会丢失1秒数据
noOS自己决定什么将缓冲区写入硬盘不用管理不能管理
AOF重写
  • 功能:通过合并命令,删除重复命令,删除过期命令,从而达到减少AOF文件大小

  • 使用:

    • redis-cli> bgrewriteaof

              bgrewriteaof
      client <-------------> redis
                    ok         |
                               |
                               v       AOF重写
                          redis子进程 -----------> AOF重写文件
      
    • 通过AOF重写配置

AOF配置
配置项配置说明
appendonly yes|no是否开启AOF
appendfilename xxx.aofAOF文件名
appendfsync always|everysec|noAOF触发方式【默认everysec】
dir ./AOF文件存放目录
no-appendfsync-on-rewrite yes|no重写时是否不继续写入新命令 【推荐yes】
auto-aof-rewrite-min-sizeAOF文件重写需要的尺寸
auto-aof-rewrite-percentageAOF文件重写增长率
AOF统计与触发时机
  • 统计
统计名说明
aof_current_sizeAOF当前尺寸
aof_base_sizeAOF上次启动和重写的尺寸
  • 触发时机
    • aof_current_size > auto-aof-rewrite-min-size
    • aof_current_size - aof_base_size/aof_base_size > auto-aof-rewrite-percentage

RDB和AOF对比

命令RDBAOF
启动优先级
体积
恢复速度
数据安全性丢数据根据策略
轻重
  • 28
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值