缓存一致问题、幂等、jvm调优

news2024/11/26 4:24:21

缓存笔记 来自 程序员囧辉

黑马博学谷 幂等问题

1 缓存一致问题

1.1.同步删除

核心流程:

  1. 更新数据库数据
  2. 删除缓存数据

问题:

  • . 并发场景下存在脏数据 (并发有脏数据问题)
  • . 难以收拢所有更新数据库入口 (可能通过命令行、工具等删除db,那么redis 无法删除)
  • . 删除缓存失败存在脏数据
    3

1.2. 延时双删

核心流程:

  1. 删除缓存数据
  2. 更新数据库数据
  3. 等待一小段时间
  4. 再次删除缓存数据

问题:

  • 延时时间难以确认 (延时时间无法确认)
  • 延时无法绝对保障数据的一致性 (主从情况下 主从的库)
    3

1.3:异步监听从库binlog删除 + 重试

核心流程:

  1. 更新数据库
  2. 监听binlog删除缓存
  3. 缓存删除失败则通过MQ不断重试,直至删除成功

存在问题:

  • 缓存 脏数据时间窗口“较大” ( 针对于同步删除来说的)
    • 更新完 db,产生binlog ,binlog发到从库,mq消费 删除缓存 都需要时间
    • 在上面期间,缓存没删除,那也是有脏数据。
  • 极端场景下存在长期脏数据问题
    • binlog抓取组件宕机
    • 拆库拆表流程
      3

1.3.1 推荐监听从库

这是一个权衡吧,你直接监听主库也是可以的,但是为什么我们不这么干了。
因为主从延迟通常情况下是很低的,基本在毫秒级別,几乎可以忽略不计。而监听主库会有什么问题了,如果我们的binlog中间件在功能迭代期间出现了bug,直接将主库搞挂或者影响到主库,那可能就直接影响到整个链路了,而如果影响的是从库,即使挂了可能也几乎没影响,因为我们一般会有预留容量,挂1台从库理论不会影响业务。
所以没有必要为了几毫秒的延迟去冒这个风险。

1.4. 最终保证

  1. 更新数据库后 同步删除缓存。(减少异步删除不一致 时间窗口 太久的情况)
  2. 为了应对并发问题。引入监听binlog,异步删除。带有重试,一定要成功。
  3. 缓存数据带过期时间。过期后删除。
    • 主要用于进一步防止并发下的脏数据问题
    • 解决一些由于未知情况,导致需要更换缓存结构的问题
  4. 监听数据库的binlog延迟N秒后进行数据一致性校验
    • 解决一些极端场景下的脏数据问题
  5. 存在数据库更新的链路禁用对应缓存
    • 比如更新完数据库后,马上又查询一次 可能查询的数据还是脏数据。
    • 就是在更新请求链路中的查询请求都直接查db
    • 防止并发下短期内的脏数据影响到更新流程
  6. 强制读Redis主节点
    • 查询异步数据一致性校验、灰度放量

3

2.jvm 调优

  1. Serial GC:Full GC整个过程STW,Young GC整个过程STW
  2. Parallel GC:Full GC整个过程STW,Young GC整个过程STW
  3. CMS GC:Full GC整个过程STW,Young GC整个过程STW,Old GC只有两个小阶段STW
  4. G1 GC:Full GC整个过程STW,Young GC整个过程STW,Mixed GC由全局并发标记和对象复制组成,全局并发标记其中两个小阶段STW,其它并发
  5. Shenandoah GC/ZGC:它们都是回收堆的一部分,所以没有Full GC(Full GC是指回收整个堆,与之相对的是Partial GC,比如CMS GC的Old GC和G1的Mixed GC均属于此类)的概念

2.1 分区比例不合适问题

eden 比较小,导致:YGC次数变多。
eden 比较大,导致:扫描增多,YGC时间增加。
YGC STW的。影响接口请求时间。
survivor 偏小,导致:有些对象动态年龄规则,提前。直接晋升到老年代。
survior 偏大。导致浪费一些空间。

2.2 gc

软引用
当gc后,空间还是不够用,将软引用作为gcroot,在进行一次gc。GC cause last dist collection。

cms 内存碎片,标记清除。
碎片化严重,影响大对象分配,没有连续的空间

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

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

相关文章

[Golang] 设计模式以及单例设计模式实例实现

😚一个不甘平凡的普通人,致力于为Golang社区和算法学习做出贡献,期待您的关注和认可,陪您一起学习打卡!!!😘😘😘 🤗专栏:算法学习 &am…

Django框架之视图的基本使用

Django框架之视图的基本使用 概述 在django中,视图方法简称视图,对web请求进行回应。 视图就是一个python函数,在views.py文件中定义。 定义视图 在project/myapp/views.py文件中定义 引入http from django.http import HttpResponse 视…

【C语言】实战练习

目录 1.计算体积&#xff1a; 2、根据父母身高计算孩子的理论身高&#xff1a; 3、三十六计的几计&#xff1a; 4、文本输出&#xff1a; 5、粮仓计数&#xff1a;​编辑 6、auto 7、static: 8、模拟用户注册系统&#xff1a; 1.计算体积&#xff1a; #include <std…

NetXpert XG2帮您解决“布线安装与维护”难题

在传输大量数据时&#xff0c;光纤变得越来越重要&#xff0c;而铜缆在未来也将继续发挥重要作用&#xff0c;因此我们不仅要比较两种类型布线的优缺点&#xff0c;还要探究光纤传输中的错误来源。 测试光缆传输损耗的准确性对于故障排除至关重要&#xff0c;特别是在光纤情况下…

27-Servlet执行原理

目录 1.Tomcat详解 ①接收请求&#xff1a; ②根据请求计算响应&#xff1a; ③返回响应&#xff1a; 2.Tomcat执行流程 2.1.Tomcat 初始化流程 2.2.Tomcat 处理请求流程 2.3.Servlet 的 service 方法的实现 在 Servlet 的代码中并没有写 main ⽅法&#xff0c;那么对应…

2022年中国预制菜市场规模已超过4000亿元,2026年将突破万亿

佛跳墙、小酥肉、酸菜鱼、猪肚鸡、煎牛排、炸鸡、小龙虾等等&#xff0c;这些需要花上长时间烹饪制作的大菜&#xff0c;现在只需用烤箱或空气炸锅几分钟就制作出来了&#xff0c;且味道还不赖。预制菜最大的优势在于方便&#xff0c;极大的省去了买菜洗菜、切菜、制作的繁琐程…

YOLOv5网络模型的结构原理讲解(全)

目录 前言1. 基本概念2. 输入端2.1 Mosaic 图像增强2.2 自适应锚框计算2.3 自适应图片缩放 3. Backbone层3.1 Focus结构3.2 CSP结构 3. Neck网络3.1 SPP结构3.2 PAN结构 4. 输出端4.1 Bounding box损失函数4.2 NMS非极大值抑制 前言 YOLOv5有几种不同的架构&#xff0c;各网络…

ChatGPT评微博热文“留给普通人的最后一扇门,快要关闭了”

目录 留给普通人的最后一扇门&#xff0c;快要关闭了 这篇文章你看过吗 普通人通过接受高等教育提升阶级的路还走得通吗&#xff0c;为什么大家都开始考公务员了 高等教育仍然是提升阶级的一条途径&#xff0c;但并不是唯一的途径。那还有哪些路径&#xff1f; 继续&#x…

【谷歌插件开发】获取当前网站COOKIE并上报HTTP-API

一 背景 由于本人每天需要登录网站查看数据并分析统计汇总&#xff0c;而每次机械式地搜索和简单计算&#xff0c;十分繁琐。我们可以写个定时任务&#xff0c;每天根据cookie获取网站数据并遍历统计。 脚本得以成功执行的关键是需要获取到COOKIE 故&#xff0c;写了个谷歌插件…

UE4架构初识(七)

目录 UE4仿真引擎学习 一、架构基础总结 1. 游戏世界 2. 数据和逻辑 3. 整体类图 UE4仿真引擎学习 一、架构基础总结 1. 游戏世界 在UE的眼里&#xff0c;游戏世界的万物皆Actor&#xff0c;Actor再通过Component组装功能。Actor又通过UChildActorComponent实现Actor之间的…

代码随想录之贪心合集

455 分发饼干 先排序之后按顺序比较 class Solution {public int findContentChildren(int[] g, int[] s) {//57Arrays.sort(g);Arrays.sort(s);int k0;int i0;int count0;while(k<s.length&&i<g.length){if(g[i]<s[k]){count;i;k;}else k;}return count;} }…

视频大文件传输的演变:从“卷轴男孩”到自动化

200年前&#xff0c;从纽约市到英国伦敦的单程旅行需要乘坐一艘跨大西洋轮船将近三周——如果你能负担得起的话&#xff0c;那就是。那些不能在满是汗水、狭窄的帆船上安顿大约一个半月的人。 今天&#xff0c;视频专业人士能够在几小时甚至几分钟内跨越相同的物理距离传输大量…

烟雾弹?突然转变?如何看待微软发声:中国是主要的对手

是的&#xff0c;我又回来了&#xff0c;今天要跟各位唠的还是ChatGPT的嗑。今天的新闻是啥呢&#xff1f; 《微软总裁&#xff1a;中国将是 ChatGPT 的主要对手&#xff0c;我们的优势不大》 说实话&#xff0c;我看到这个新闻的时候&#xff0c;大感震撼&#xff0c;在相关报…

YOLOv5快速入门demo

文章目录 1. 官网下载 yolo_master2. 下载得到yolov5-maser.zip 对其进行解压3. 安装所需要的包4. 官网下载一个与训练模型5. 测试一个小demo 使用detect.py6. 训练一个模型 1. 官网下载 yolo_master https://gitcode.net/mirrors/ultralytics/yolov5 下载克隆 2. 下载得到…

HART协议数据格式避坑(C语言压缩字符串Packed-ASCII和ASCII转换)

HART协议数据格式避坑&#xff08;C语言压缩字符串Packed-ASCII和ASCII转换&#xff09; 首先HART数据格式如下&#xff1a; 重点就是浮点数和字符串类型 Latin-1就不说了 基本用不到 浮点数 浮点数里面 如 0x40 80 00 00表示4.0f 在HART协议里面 浮点数是按大端格式发送的…

oracle 18c dataguard 从库scn 不更新BUG

Bug 29056767 - STANDBY: Datafiles Checkpoint not Updated at Standby Database when Media Recover is running (Doc ID 29056767.8)正在上传…重新上传取消To Bottom Bug 29056767 STANDBY: Datafiles Checkpoint not Updated at Standby Database when Media Recover i…

IPEmotion控制模块-PID循环应用

IPEmotion专业版、开发版支持控制模块&#xff0c;并且该模块支持函数发生器、PID控制器、路由器、序列控制和序列控制块以及参考曲线生成器。本文主要针对PID&#xff08;P&#xff1a;Proportional control 比例控制&#xff1b;I&#xff1a;Integral control 积分控制&…

Linux tail 命令

前言 Linux 实时查看日志文件&#xff0c;最主要使用的就是tail命令。 linux tail命令用于显示文件尾部的内容&#xff0c;默认在屏幕上显示指定文件的末尾10行。如果给定的文件不止一个&#xff0c;则在显示的每个文件前面加一个文件名标题。如果没有指定文件或者文件名为“-”…

同步辐射全散射PDF分析:探究材料结构的新方法

同步辐射全散射PDF&#xff08;Pair Distribution Function&#xff09;分析是一种非常强大的物质结构研究方法。它通过同步辐射技术&#xff0c;将X射线或中子散射的数据进行处理&#xff0c;得到物质的原子间距分布函数&#xff0c;从而揭示物质的微观结构信息。该方法已经在…

Vue3上传(Upload)

可自定义设置以下属性&#xff1a; 接受上传的文件类型&#xff08;accept&#xff09;&#xff0c;类型&#xff1a;string&#xff0c;默认 *&#xff0c;&#xff0c;与<input type"file">的accept属性一致&#xff0c;详见 https://developer.mozilla.org/…