Redis详解(五)

持久化

  • 数据的更新异步保存在磁盘上,防止内存断电丢失数据
  • 方式无非两种:打快照(直接存数据),写日志(保存写入和更新的命令)
    1

RDB

  • 将内存中的数据保存为二进制文件
    2
  • 三种触发保存的机制
    • 直接执行save命令
      3
      • 这是一种同步命令,可能会引起阻塞
        4
    • 使用bgsave异步保存,使用Linux的fork生成子进程
      5
      • 文件策略和复杂度与save相同
        6
    • 自动生成RDB,使用自定义的配置文件:
      7
  • 准备一组数据测试一下
    • 使用dbsize可以查看到有足够的key,info memory查看占用了900兆内存
      8
    • 先测试save,在配置中注释掉自动生成RDB的内容
      9
      10
      • 查看data目录可以发现生成了400M作用的RDB文件(压缩)
    • 验证bgsave的异步
      • 在无需改动配置
        11
        12
      • 在客户端2执行任何操作不会阻塞,grep也可以找到生成的子进程,-v表示不看
      • 在data目录执行ll可以看到生成的临时文件temp.log
    • 验证自动生成,配置中打开save 60 5,60秒钟有5次改动就持久化
      • 需要重启:redis-cli shutdownredis-server redis-6379.conf
      • 连接客户端,修改5次数据
      • 可以在日志查看:tail -f 6379.log,也生成了新的dump-6379.rdb,可以查看
  • 小结
    13

AOF

  • RDB有什么问题
    • 耗时耗性能
      14
    • 不可控,丢失数据;意外宕机,写命令的数据未保存
      15
  • AOF原理
    • 数据写入和更新的命令都会保存在AOF文件
      16
    • 需要恢复时,将AOF的命令加载一遍即可
      17

三种策略

  • always策略
    • 写命令先放入缓冲区,异步写入磁盘(高效)
      在这里插入图片描述
    • always的意思是每条命令都异步写入(落盘)
  • everysec策略
    • 每秒钟向硬盘写入一次
      17
    • 有可能丢失一秒的数据
  • no策略
    • 操作系统决定何时落盘
      18
  • 比较
    • 主要从数据丢失情况和开销方面权衡
      19

AOF重写

  • 很多命令可以化简再存储到AOF文件
    20
  • 可以减少硬盘占用量加速恢复速度
  • 两种重写方法
    • 1.使用bgrewriteaof命令
      21
      • 并不是针对已经保存的AOF文件,而是直接对内存回溯
    • 2.使用配置自动触发
      22
    • 需要满足两个配置的条件:
      23
      • 应该除以一个固定值吧?不然启动重写的阈值越来越大?
  • 完整重写流程:(以手动命令为例)
    24
    • 3-1就是正常的子进程写命令到缓冲区,最后
    • 3-2过程会将重写AOF期间的落到盘里的写命令append到新的AOF中,防止新旧数据不一致!
    • 基本配置如下:(包含自动重写机制)
      25
    • appendonly 设置为yes表示开启AOF功能(因为是追加方式操作AOF);会生成appendonly.aof文件
      • 文件格式
        26
  • 设置完毕后,我们可以执行“AOF重写”部分第一张图片中演示的语句,看看生成的新aof文件是否进行了简化!

对比

  • RDB和AOF策略的对比
    27
    • AOF的优先级较高!
    • RDB文件会压缩,不要觉得存数据体积就大!

最佳策略

  • RDB最佳策略
    28
  • AOF最佳策略
    29
  • 最佳策略
    30
  • 实际部署的时候要根据场景选择!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Roy_Allen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值