Redis持久化策略——Java全栈知识(17)

Redis持久化

1、Redis 持久化的三种方式

1、RDB: 以快照的方式将此刻 Redis 中的数据以二进制的文件形式保存在磁盘中。
RDB 的优点是:快照文件小、恢复速度快,适合做备份和灾难恢复。
RDB 的缺点是:定期更新可能会丢数据(在最后一次数据快照到服务器宕机之间的数据就会丢失)
2、AOF: AOF 是将 Redis 的所有写操作追加到 AOF 文件 (Append Only File)的结尾,从而记录了 Redis 服务器运行期间所有修改操作的详细记录。当 Redis 重新启动时,可以通过执行 AOF 文件中保存的写操作来恢复数据。
AOF 的优点是:可以实现更高的数据可靠性、支持更细粒度的数据恢复,适合做数据存档和数据备份。
AOF 的缺点是:文件大占用空间更多,每次写操作都需要写磁盘导致负载较高
3、混合模式: 在开启混合持久化的情况下,AOF 重写时会把 Redis 的持久化数据,以 RDB 的格式写入到 AOF 文件的开头,之后的数据再以 AOF 的格式化追加的文件的末尾。
优点:解决了上述 RDB 和 AOF 的缺点
缺点:Redis 4.0 之后才支持,对低版本的不兼容

2、RDB 的执行流程

image.png

RDB 的流程:
1、当 Redis 进行 RDB 快照的时候,主进程 fork 出一个子进程。
2、子进程会把页表复制一份,真正的数据还在内存上也就是主进程和子进程共用的数据。
3、子进程将此时物理内存中的数据写入到磁盘中替换掉原来的 RDB 文件。
但是此时如果有请求来修改数据,而子进程在读和写数据到磁盘中,那么此时就会有脏读问题。
fork 采用的是 copy-on–write 技术:

  • 当主进程在读的时候,访问共享内存
  • 当主进程正在写的时候,会拷贝一份数据副本,进行写操作。
    fork 操作之后再把数据副本覆盖到数据上。

3、AOF 的三种写策略

AOF 有三种数据写回策略,分别是 Always, Everyseci 和 No。

  • Awys, 同步写回:每个写命令执行完,立马同步地将日志写回磁盘;
  • Everysec 每秒写回:每个写命令执行完,只是先把日志写到 AOF 文件的内存缓冲区,每隔一秒把缓冲区中的内容写入磁盘:
  • No, 操作系统控制的写回:每个写命令执行完,只是先把日志写到 AOF 文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘。

“同步写回”可靠性肯定是最高的,但是它在每一个写命令后都有一个落盘操作,而且还是同步的,这和直接写磁盘类型的数据库有啥区别?
"操作系统控制的写回"这种是最不靠谱的,谁知道操作系统啥时候帮你做持久化,万一没来及持久化就宕机了,不就 gg 了。
"每秒写回"是在二者之间折中了一下,异步的每秒把数据写会到磁盘上,最大程度的提升效率和降低风险。也是实际开发中使用最多的策略

4、AOF 无用写命令问题:

因为 AOF 中一条数据可能多次的写操作,只有最后一次有意义,
比如:set name 1 set name 2 set name 3 这三条命令,在恢复数据的时候只有最后一条数据有意义,如果上述无意义的写操作非常多,就会导致 AOF 的文件臃肿大多数据都是无用的。
解决方法:bgrewriteaof 命令
可以让 AOF 文件执行重写,擦去无用的写操作。

Redis 也会在触发阈值时自动去重写 AOF 文件。阈值也可以在 redis.conf 中配置:

# AOF 文件比上次文件增长超过多少百分比则触发重写
auto-aof-rewrite-percentage 100
# AOF文件体积最小多大以上才触发重写
auto-aof-rewrite-min-size 64 mb

5、AOF 和 RDB 的区别

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/9281.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20K薪资要什么水平?来看看25岁测试工程师的面试过程…_测试工程师薪资20k(2)

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化! 由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、…

阿里云最新重磅发布:通义千问2.5模型更强、5到10行代码搭建企业RAG应用、代码助手通义灵码推企业版

速览: 5月9日阿里云举办“阿里云AI智领者峰会”,会上发布一系列重磅产品,通义千问模型性能更强,通义灵码、阿里云百炼平台、通义千问App等均有重要信息发布。 会上阿里云发布正式发布通义千问2.5,中文性能全面赶超GPT-…

我们的小程序每天早上都白屏,真相是。。。

大家好,我是程序员鱼皮。最近我们在内测一款面试刷题小程序,没错,就是之前倒下的 “面试鸭”! 在我们的内测交流群中,每天早上都会有同学反馈:打开小程序空白,没任何内容且登录不上。 然后过了…

PT:fix_eco_power用法

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 ICC2中没有直接修leakage/power的命令,需要在scenario status中设置leakage_power和dynamic_power的开关,结合place_opt/clock_opt.flow.enable_power true来使用。 innovus中专门的命令可以去优…

单单单单单の刁队列

在数据结构的学习中,队列是一种常用的线性数据结构,它遵循先进先出(FIFO)的原则。而单调队列是队列的一种变体,它在特定条件下保证了队列中的元素具有某种单调性质,例如单调递增或单调递减。单调队列在处理…

游戏辅助 -- 三种分析角色坐标方法(CE、xdbg、龙龙遍历工具)

所用工具下载地址: https://pan.quark.cn/s/d54e7cdc55e6 在上次课程中,我们成功获取了人物对象的基址:[[[0xd75db8]1C]28],而人物血量的地址则是基址再加上偏移量278。 接下来,我们需要执行以下步骤来进一步操作&a…

新版security demo(二)前端

写这篇博客,刚好换了台电脑,那就借着这个demo复习下VUE环境的搭建。 一、前端项目搭建 1、安装node 官网下载安装即可。 2、安装脚手架 npm install -g vue-cli 使用脚手架搭建一个demo前端项目 vue init webpack 项目名称 3、安装依赖 这里安装…

【OpenHarmony 实战开发】 做一个 loading加载动画

本篇文章介绍了如何实现一个简单的 loading 加载动画,并且在文末提供了一个 demo 工程供读者下载学习。作为一个 OpenHarmony 南向开发者,接触北向应用开发并不多。北向开发 ArkUI 老是改来改去,对笔者这样的入门选手来说学习成本其实非常大&…

【每日力扣】98. 验证二叉搜索树 与 108. 将有序数组转换为二叉搜索树

🔥 个人主页: 黑洞晓威 😀你不必等到非常厉害,才敢开始,你需要开始,才会变的非常厉害 98. 验证二叉搜索树 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&a…

【C++】适配器模式

文章目录 前言 1. 适配器的介绍2. 仿函数2.1 sort函数的模板参数2.2 priority_queue类的模板参数 3. priority_queue模拟实现3. stack & queue 模拟实现3.1 deque的介绍3.2 deque的优点与缺陷3.3 STL标准库中对于stack和queue的模拟实现 前言 C中的适配器是一种设计模式&am…

物联网实战--平台篇之(四)账户后台交互

目录 一、交互逻辑 二、请求验证码 三、帐号注册 四、帐号/验证码登录 五、重置密码 本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240124016/category_12631…

线程安全的概念及原因

1.观察线程不安全 public class ThreadDemo {static class Counter {public int count 0;void increase() {count;}}public static void main(String[] args) throws InterruptedException {final Counter counter new Counter();Thread t1 new Thread(() -> {for (int …

进一步分析并彻底解决 Flink container exit 143 问题

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…

AlibabaCloud微服务下的链路追踪系统实战详解

🚀 作者 :“二当家-小D” 🚀 博主简介:⭐前荔枝FM架构师、阿里资深工程师||曾任职于阿里巴巴担任多个项目负责人,8年开发架构经验,精通java,擅长分布式高并发架构,自动化压力测试,微服务容器化k…

如何利用AI技术提升内容生产的效率和质量

目录 前言1 自动化内容生成1.1 文章生成1.2 视频制作1.3 音频合成 2 内容分发与推广2.1 智能内容推荐2.2 社交媒体管理 3 内容分析与优化3.1 用户反馈分析3.2 内容效果评估 结语 前言 在当今数字化时代,人工智能(AI)技术对内容生产、分发和优…

MFC实现点击列表头进行排序

MFC实现点击列表头排序 1、添加消息处理函数 在列表窗口右键,类向导。选择 IDC_LIST1(我的列表控件的ID),消息选择LVN_COLUMNCLICK。 2、消息映射如下 然后会在 cpp 文件中生成以下函数 void CFLashSearchDlg::OnLvnColumnclic…

C++中的右值引用和移动语义

目录 1 左值引用和右值引用 2 左值引用与右值引用比较 3 右值引用使用场景和意义 4 右值引用引用左值及其一些更深入的使用场景分析 5 完美转发 6.常数右边引用 1 左值引用和右值引用 传统的C语法中就有引用的语法,而C11中新增了的右值引用语法特性&#xff0c…

顶级开源Kubernetes管理工具有哪些?好用Kubernetes工具推荐

Kubernetes已经成为容器编排领域颠覆性的技术,而充满活力的开源社区是其成功背后的推动力。本文将为大家推荐好用的Kubernetes工具,围绕Kubernetes发展的生态系统的广度和深度。 从自动化和监控到网络和安全性,这些工具为管理容器化应用程序…

数据库系统原理实验报告5 | 数据查询

整理自博主本科《数据库系统原理》专业课自己完成的实验报告,以便各位学习数据库系统概论的小伙伴们参考、学习。 专业课本: ———— 本次实验使用到的图形化工具:Heidisql 目录 一、实验目的 二、实验内容 1.找出读者所在城市是“shangh…

最佳实践 | 八爪鱼采集器如何用PartnerShare做全民分销?

在数字化时代,数据采集和分析已经成为企业运营和决策的重要一环。八爪鱼采集器作为一款领先的SaaS产品,凭借其强大的数据采集和处理能力,成为了众多企业和个人用户的心头好。为了进一步拓展市场份额,提升品牌影响力,八…