Redis缓存持久化
缓存持久化
RDB
RDB持久化是把当前进程数据生成快照保存到硬盘,
命令为
save
阻塞执行,已废弃bgsave
创建子进程执行
bgsave执行结果
33375:M 24 Sep 16:39:02.580 * Background saving started by pid 34280
34280:C 24 Sep 16:39:02.592 * DB saved on disk
34280:C 24 Sep 16:39:02.593 * RDB: 6 MB of memory used by copy-on-write
33375:M 24 Sep 16:39:02.599 * Background saving terminated with success
save执行结果
33375:M 24 Sep 16:39:02.599 * Background saving terminated with success
33375:M 24 Sep 16:41:27.320 * DB saved on disk
触发机制:
- 手动触发
- 自动触发
- 1) 使用save相关配置, 如“save m n”。 表示m秒内数据集存在n次修改时, 自动触发bgsave。
- 2) 如果从节点执行全量复制操作, 主节点自动执行bgsave生成RDB文件并发送给从节点。
- 3) 执行debug reload命令重新加载Redis时, 也会自动触发save操作。
- 4) 默认情况下执行shutdown命令时, 如果没有开启AOF持久化功能则自动执行bgsave。
bgsave运行流程
![](https://wejack639.oss-cn-beijing.aliyuncs.com/blogimages/img/1632473860585-20210924165740.png)
文件压缩
Redis默认采用LZF算法对生成的RDB文件做压缩处理, 压缩后的文件远远小于内存大小, 默认开启, 可以通过参数config setrdbcompression{yes|no}动态修改。虽然压缩RDB会消耗CPU, 但可大幅降低文件的体积, 方便保存到硬盘或通过网络发送给从节点, 因此线上建议开启。
RDB优缺点:
优点 | 缺点 |
---|---|
文件小,适于全量备份,便于传输和恢复 Redis加载恢复速度快 |
bgsave创建子进程操作较重,不能实时/秒级持久化,频繁执行成本过高 RDB二进制文件新老版本可能会不兼容 |
AOF
记录每次写命令到AOF文件中,恢复时重新执行AOF文件中的命令
策略 | 说明 |
---|---|
always | 命令写入aof_buf后调用fsync操作同步到AOF文件,每次写入都会执行,不建议 |
everysec | 命令写入aof_buf后调用系统write操作,write完成后线程返回,fsync同步文件操作由专门线程每秒调用一次。是默认的也是建议的同步策略,兼顾性能和数据安全。理论上宕机只丢1秒数据。 |
no | 命令写入aof_buf后调用write操作,由操作系统负责控制写入AOF,同步周期最长30秒,性能会提升,但安全无法保证。 |
系统调用write和fsync说明:
write操作会触发延迟写(delayed write) 机制。 Linux在内核提供页缓冲区用来提高硬盘IO性能。 write操作在写入系统缓冲区后直接返回。 同步硬盘操作依赖于系统调度机制, 例如: 缓冲区页空间写满或达到特定时间周期。 同步文件之前, 如果此时系统故障宕机, 缓冲区内数据将丢失。
fsync针对单个文件操作(比如AOF文件) , 做强制硬盘同步, fsync将阻塞直到写入硬盘完成后返回, 保证了数据持久化。
重写机制
为避免AOF文件越写越大,Redis引入AOF重写机制压缩文件体积。 AOF文件重写是把Redis进程内的数据转
化为写命令同步到新AOF文件的过程。
文件变小原理:
- 进程内超时数据不再写入文件
- 删除无效命令如:del等,只使用进程内数据直接生成,保留最终写入命令
- 集合多次操作命令合并,以64个元素为界拆分为多条
触发:
- 手动: 调用bgrewriteaof命令。
- 自动:根据参数确定自动触发时机。
- auto-aof-rewrite-min-size: AOF重写最小体积
- ·auto-aof-rewrite-percentage: 代表当前AOF文件空间( aof_current_size) 和上一次重写后AOF文件空间( aof_base_size) 的比
值。
自动触发时机=aof_current_size>auto-aof-rewrite-min-size&&( aof_current_size-aof_base_size)/aof_base_size>=auto-aof-rewrite-percentage
其中aof_current_size和aof_base_size可以在info Persistence统计信息中查看。
127.0.0.1:6380> info Persistence
# Persistence
loading:0
rdb_changes_since_last_save:2
rdb_bgsave_in_progress:0
rdb_last_save_time:1632476935
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
aof_enabled:1
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:0
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
aof_current_size:199
aof_base_size:199
aof_pending_rewrite:0
aof_buffer_length:0
aof_rewrite_buffer_length:0
aof_pending_bio_fsync:0
aof_delayed_fsync:0
aof重写流程
![](https://wejack639.oss-cn-beijing.aliyuncs.com/blogimages/img/1632479984947-20210924183944.png)
持久化文件加载流程
![](https://wejack639.oss-cn-beijing.aliyuncs.com/blogimages/img/1632480095856-20210924184135.png)
Redis单线程架构导致无法充分利用CPU多核特性, 通常的做法是在一台机器上部署多个Redis实例。 当多个实例开启AOF重写后, 彼此之间会产生对CPU和IO的竞争。 如果同一时刻运行多个子进程, 对当前系统影响将非常明显, 因此单机下部署多实例时需要采用一种措施, 把子进程工作进行隔离。通过info Persistence
命令可以获取监控子进程运行状况的度量指标。基于以下这些指标,可以通过外部程序轮询控制AOF重写操作的串行执行。
![](https://wejack639.oss-cn-beijing.aliyuncs.com/blogimages/img/1632623914351-20210926103833.png)
Redis缓存持久化相关推荐
- Redis缓存持久化:RDB持久化和AOF持久化
突然挂了!Redis缓存都在内存中,这下完了! 来源 | 编程技术宇宙 作者 | 轩辕之风O 我是Redis,一个叫Antirez的男人把我带到了这个世界上. "快醒醒!快醒醒!" ...
- Redis 缓存穿透、雪崩、缓存数据库不一致、持久化方式、分布式锁、过期策略
1. Redis 缓存穿透 1.1 Redis 缓存穿透概念 访问了不存在的 key,缓存未命中,请求会穿透到 DB,量大时可能会对 DB 造成压力导致服务异常. 由于不恰当的业务功能实现,或者外部恶 ...
- 执行一次怎么会写入两次数据_Java进阶知识:一文详解缓存Redis的持久化机制,新手看完也会用
Redis 的数据全部在内存里,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证 Redis 的数据不会因为故障而丢失,这种机制就是 Redis 的持久化机制. Redis有两种持久化的方式: ...
- 我的架构梦:(六十三) 分布式缓存 Redis 之持久化
分布式缓存 Redis 之持久化 一.前言 1.学习目标 2.为什么要持久化 二.RDB 1.触发快照的方式 2.RDB执行流程(原理) 3.RDB文件结构 4.RDB的优缺点 三.AOF 1.AOF ...
- redis缓存的雪崩、击穿、穿透,淘汰策略,持久化
1.redis缓存的雪崩.击穿.穿透,在实际中如何处理? 雪崩:缓存不存在,数据库存在,高并发,大量的key 原因:大量数据同时过期,Redis宕机 解决方案:给缓存数据的过期时间上加上小的随机数,避 ...
- Redis综述篇:与面试官彻夜长谈Redis缓存、持久化、淘汰机制、哨兵、集群底层原理!...
点击上方关注 "终端研发部" 设为"星标",和你一起掌握更多数据库知识 于哥你好,最近面试挺多的,尤其是在问到java面试题,Redis被问的特别多,比如Red ...
- 点赞模块设计:Redis缓存 + 定时写入数据库实现高性能点赞功能
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:solocoder juejin.im/post/5bdc2 ...
- Redis RDB 持久化详解
来自公众号:程序员历小冰 Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多.但是一旦进程退出,Redis 的数据就会丢失. 为了解决这个问题,Re ...
- Redis AOF 持久化详解
来自公众号:程序员历小冰 Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多.但是一旦进程退出,Redis 的数据就会丢失. 为了解决这个问题,Re ...
- 彻底理解 Redis 的持久化和主从复制
作者 | 张君鸿 来源 | https://juejin.cn/post/6844903874927525902 在这篇文章,我们继续有关Redis方面知识的学习,一起了解一下其中一个非常重要的内容: ...
最新文章
- R语言层次聚类模型示例
- HDU 3308 线段树求区间最长连续上升子序列长度
- 在CentOS6.5上安装Tomcat7
- 惠普打印机怎么无线连接电脑_惠普SPECTRE X360 13笔记本电脑怎么样,值得买吗
- HTML悬浮音乐播放器源码 自带后台
- 蚂蚁金服 AntV F2 3.6 发布,更强!更快!
- 了解 XSS 攻击原理
- 代码安全 | 什么是OWASP?OWASP十大漏洞解析
- 如何实现业务流程集成
- 不想安装环境,我如何与前端工程师远程协作开发?
- 坐标转换中的七参数详谈
- USB3.2超高速协议规范
- 科研小助手PubMed的插件PubMedy
- 通信算法之六十:SC_FDE系统的物理层算法设计与工程实现
- pythonmatplotlib绘图小提琴_python 箱线图和小提琴图
- iOS开发除了XCode还需要掌握的8个重要工具,让您开发更容易
- Android打电话不一定要申请权限
- 概率论(三)- 全概公式逆概公式(贝叶斯公式)
- Office PPT 技能培训
- 解决“IE图标不见了”问题