当前位置: 首页 > news >正文

Redis的持久化的策略

Redis的持久化的策略

官方文档说明

  • AOF持久化策略
  • RDB持久化的策略

AOF持久化策略

AOF持久性记录服务器接收到的每个写操作,然后,可以在服务器启动时再次重播这些操作,重建原始数据集,使用与Redis协议本身相同的格式记录命令。

appendonly yes #默认是不开启的,我们需要手动配置成no来进行开启# The name of the append only file (default: "appendonly.aof")
appendfilename "appendonly.aof"

AOF 的执行流程

AOF策略的特点

  • 同时使用这两种持久化方式,redis 默认优先加载 aof 文件(aof 数据最完整);

  • AOF 文件会在操作过程中变得越来越大

    • 比如,如果你做一百次加法计算,最后你只会在数据库里面得到最终的数值,但是在你的 AOF 里面会存在 100 次记录,其中 99 条记录对最终的结果是无用的;

    • Redis 支持在不影响服务的前提下在后台子进程(主进程可以继续处理命令请求,避免阻塞主进程

      )重构 AOF文件,让文件得以整理变小;

    • 后台重写的触发条件

      //执行 AOF 重写时,当前 AOF 大小(aof_current_size)和上一次重写时 AOF 大小(aof_base_size)的比值
      auto-aof-rewrite-percentage 100 //AOF文件大于64M
      auto-aof-rewrite-min-size 64mb  //或者用户手动通过调用 bgrewriteaof手动触发
      

AOF 文件存储格式

  • redis-cli 下执行写命令
127.0.0.1:13>set name "kevin"
"OK"
127.0.0.1:13>del name
  • 对应aop文件中记录的内容,就是对应的写操作命令,采用的RESP协议:Redis 的序列化协议。
*2
$6
SELECT
$2
13
*3
$3
set
$4
name
$5
kevin
*2
$3
DEL
$4
name

RDB持久化的策略

RDB 持久化(也称作快照持久化)是指将内存中的数据生成快照保存到磁盘里面,默认文件名dump.rdb

# The filename where to dump the DB
dbfilename dump.rdb

Redis 还可以通过配置文件的选项来实现每隔一段时间自动执行一次 bgsave 命令,虽然选项名称时save,实际上执行的是bgsave命令。自动执行策略可以配置多个,只要满足上面任意一个条件就会执行bgsave。


save 900 1     #900 秒之内,对数据库进行了至少 1 次修改;
save 300 10    #300 秒之内,对数据库进行了至少 10 次修改
save 60 10000  #60 秒之内,对数据库进行了至少 10000 次修改

RDB执行流程

执行了 save 命令,就会在主线程生成 RDB 文件,由于和执行操作命令在同一个线程,所以会阻塞主线程。

bgsave 是fork一个子线程进行处理,所以不会阻塞主线程。

RDB特点

  • 由于存储的是数据快照文件,恢复数据很方便,也比较快
  • 会丢失最后一次快照以后更改的数据

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java之MySQL
  • [Unity]关闭URP的SRP,开启GPU Instancing。
  • Neural Architecture Search:使用Ultralytics框架进行YOLO-NAS目标检测
  • 代理服务器在HTTP请求中的应用:Ruby实例
  • 腾讯二面 智力题 赛马问题
  • 腾讯大模型算法实习生面试题
  • 二.PhotoKit - 相册权限(彻底读懂权限管理)
  • 程序员变副业达人:AI绘画月入5千+,看我如何用技术打造自媒体收益流
  • 数据结构--树与二叉树
  • 网络安全自学入门:(超详细)从入门到精通学习路线规划,学完即可就业
  • Python编码系列—Python 异步编程:asyncio 的魔法与实战
  • ArduPilot开源代码之FMU+IOMCU设计
  • Java中的中介者模式:解耦复杂系统的有效策略
  • 向上or向下调整建堆 的时间复杂度的本质区别的讲解
  • git 不跟踪某些文件的几种方式
  • 自己简单写的 事件订阅机制
  • Android开源项目规范总结
  • express如何解决request entity too large问题
  • Git初体验
  • javascript从右向左截取指定位数字符的3种方法
  • laravel 用artisan创建自己的模板
  • leetcode-27. Remove Element
  • leetcode讲解--894. All Possible Full Binary Trees
  • MySQL-事务管理(基础)
  • Redash本地开发环境搭建
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Vue小说阅读器(仿追书神器)
  • windows-nginx-https-本地配置
  • 对超线程几个不同角度的解释
  • 多线程事务回滚
  • 回顾 Swift 多平台移植进度 #2
  • 简单数学运算程序(不定期更新)
  • 批量截取pdf文件
  • 使用API自动生成工具优化前端工作流
  • 思否第一天
  • 探索 JS 中的模块化
  • 一份游戏开发学习路线
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • # windows 安装 mysql 显示 no packages found 解决方法
  • #includecmath
  • $L^p$ 调和函数恒为零
  • (Python第六天)文件处理
  • (vue)页面文件上传获取:action地址
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (计算机网络)物理层
  • (七)理解angular中的module和injector,即依赖注入
  • (四) Graphivz 颜色选择
  • (四)事件系统
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (轉)JSON.stringify 语法实例讲解