缓存分布式一致性问题

news2024/11/15 11:49:34

        缓存一致性问题发生的原因,是在更新数据时数据库和缓存数据的不一致。我们要做到保证缓存的最终一致性。如果数据需要强一致性建议直接查询数据库。

双写模式

双写模式为先写数据库,在写缓存。

        进来两个请求,先执行“请求1”的操作写入数据1,这时可能由于各种原因,“请求1”卡顿。这时候我们的“请求2”执行写数据库为2,更新缓存为2。“请求1”卡顿结束继续写缓存为1。现在出现问题,我们的缓存本该为2,现在却是1,出现了脏数据

脏数据问题:

        暂时性脏数据,但是数据是稳定的,缓存过期后,又能得到最新的正确数据。

保证的是最终一致性

失效模式

        写数据库后删除缓存,当有用户查询时缓存为空,更新添加缓存。

        “请求1”在写完数据1后删除缓存。“请求2”在写缓存时如果出现比较慢的情况,这是进来“请求3”的查询操作,读取缓存为空,然后读取数据库为1。

        这时候执行有一个情况,“请求2”写完数据库,执行删除缓存。“请求3”更新缓存,那么这时候更新缓存数据为1,与数据库中最新的2不一致,出现一致性问题

脏数据问题:

        暂时性脏数据,但是数据是稳定的,缓存过期后,又能得到最新的正确数据。

缓存数据一致性解决方案

双写模式或者失效模式都会导致缓存不一致问题的出现。那么怎么处理?

        1.如果是用户纬度的数据,并发几率小,可以不用考虑大并发出现的一致性问题,缓存加上过期时间,每隔一段时间触发读的主动更新即可解决

        2.如果是菜单、商品介绍等基础数据,可以使用cannal订阅数据库binlog方式进行个性化处理

        3.缓存数据+过期时间可以足够解决大部分业务对缓存的要求。

        4.通过加锁保证并发读写,可以使用读写锁

总结:

        我们能放入缓存的数据就不应该是实时性、一致性要求超高的数据。

        不应该过度设计,增加系统的复杂度。过度设计会增加大量的开发工作以及维护工作。

缓存一致性解决-Canal

更新缓存

        Canal是阿里开源的中间件,可以模拟成数据库的从服务器,直接订阅数据库的binlog日志,然后拿到变化后更新redis 

优点:改数据库就可以了,不用关心任何的缓存操作,数据修改完成自动同步更新。

缺点:增加了中间件,需要额外开发。

解决数据异构问题

        我们去浏览淘宝京东,每个人推荐的商品都是不一样的,基于爱好进行推荐,可以使用Canal进行操作,简单逻辑:

         

 总结

一致性解决方案:        

        1.缓存所有数据都要有过期时间,保证数据过期后的下一次查询触发主动更新缓存。

        2.读写数据的时候,加上分布式的读写锁(读相当于无锁状态)。

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

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

相关文章

C语言 | Leetcode C语言题解之第392题判断子序列

题目&#xff1a; 题解&#xff1a; bool isSubsequence(char* s, char* t) {int n strlen(s), m strlen(t);int f[m 1][26];memset(f, 0, sizeof(f));for (int i 0; i < 26; i) {f[m][i] m;}for (int i m - 1; i > 0; i--) {for (int j 0; j < 26; j) {if (t…

jmeter中上传文件接口,当文件名为中文时出现乱码

1、在jmeter5.1.1中配置上传文件接口&#xff0c;当上传的文件为中文名称时&#xff0c;文件名称会显示乱码如图 2、解决方案是需要更换jmeter/lib/ext文件中的ApacheJMeter_http.jar 包 3、更换jar包经过多次实验&#xff0c;发现有的上传文件接口中文名正常&#xff0c;但是有…

华为云征文|部署RedisStack+可视化操作

目录 1.介绍 1.1 什么是华为云Flexus X实例 1.2 什么是Redis Stack ​编辑 2 准备华为云Flexus应用服务器L实例 3 准备docker环境 4 docker 安装 Redis Stack 4.1拉取镜像 4.2 确认镜像 4.3 启动容器 4.4 放行安全组端口 4.5 操作redis 5 docker compose 配置持久 1.…

【算法】--双指针

文章目录 双指针例题移动零复写零快乐数盛⽔最多的容器有效三角形的个数和为 s 的两个数字三数之和四数之和 双指针 常⻅的双指针有两种形式&#xff0c;⼀种是对撞指针&#xff0c;⼀种是快慢指针。 对撞指针&#xff1a;⼀般⽤于顺序结构中&#xff0c;也称左右指针。 对撞…

python判断语句(三)

下一篇持续更新中… 如有错误欢迎指正&#xff01;&#xff01;&#xff01; 文章目录 前言学习内容 布尔类型和比较运算符布尔类型比较运算符总结 if语句的基本格式if语句的注意点总结案例 if else语句注意点总结案例 if elif else语句注意点总结案例 判断语句的嵌套语法格式…

哪里能够使用Claude-100k?

Claude-100k 是 Anthropic 开发的一个大型语言模型&#xff0c;可以在以下几种方式中使用&#xff1a; Anthropic 官网&#xff1a;可以通过访问 Anthropic 的官方网站来获取 Claude-100k 的使用许可或API访问权限。 API 服务&#xff1a;Claude-100k 也可以通过 API 服务进行…

fastchat与autogen使用要点澄清

说明&#xff1a; 本文重点是想使用autogen构建智能体&#xff0c;并且想要通过加载本地模型来构建&#xff0c;以灵活使用。但是autogen重点是以API调用支持openai, mistral等大模型使用的&#xff0c;对于使用国内的一些模型不是那么友好方便。然后在查找方法的过程中&#x…

ElasticSearch学习笔记(五)Bucket聚合、Metric聚合

文章目录 前言9 项目实战9.3 我周边的酒店9.4 酒店竞价排名 10 数据聚合10.1 聚合的分类10.2 DSL实现聚合10.2.1 Bucket聚合10.2.2 聚合结果排序10.2.3 限定聚合范围10.2.4 Metric聚合 10.3 RestAPI实现聚合10.3.1 API语法10.3.2 业务需求10.3.3 业务实现10.3.4 功能测试 前言 …

人工智能、机器学习和深度学习有什么区别?应用领域有哪些?

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发…

RLHF(带有人类反馈的强化学习)初探

我的目标是&#xff0c;在决策游戏上学习某人风格&#xff0c;可以让人对战“带有某人风格”的AI&#xff0c;比如你可以在这里对战“sky风格的AI”,这样的效果。 我最开始受到的启发来源于xbox的广告《爸爸的幽灵车》&#xff0c;已故人在游戏中留下的速度记录的固定轨迹。 …

传统CV算法——仿射变换原理及应用

可以理解一下常规的翻转和平移。“线性变换”“平移”空间变换中的仿射变换对应着五种变换&#xff0c;平移&#xff0c;缩放&#xff0c;旋转&#xff0c;翻转&#xff0c;错切。而这五种变化由原图像转变到变换图像的过程&#xff0c;可以用仿射变换矩阵进行描述。而这个变换…

异地多活架构计算设计

随着互联网的飞速发展,企业对业务连续性和高可用性的需求日益增加。异地多活架构作为一种高可靠性的系统设计方案,通过在地理上分散的多个数据中心部署应用和数据,有效降低了单一故障点对整个系统的影响,确保业务在灾难发生时能够持续运行。 架构设计策略 业务解耦:将系…

Servelet学习-24.9.3

文章目录 前言一、Servelet概述1.1 简单入门&#xff1a;2.2 生命周期 二、HttpServletRequest对象2.1 常用方法 三、HttpServeletResponse对象 前言 九月&#xff0c;加油 一、Servelet概述 Servelet&#xff1a; server applet servelet就是一个接口,定义了Java类被浏览器访…

《大道平渊》· 廿壹 —— 杀心篇:何谓 “杀心”?本质上,就是寻求杀心的一个过程。

《大道平渊》 "行有不得&#xff0c;反求诸己。" ——《论语 学而》 指的是遇事遭困&#xff0c;须在自身寻因&#xff0c;而非怨天尤人&#xff0c;一味地归咎于外因。 凡事向内求也&#xff0c;多多自省&#xff0c;提高自身的修养和能力&#xff0c;取得成功。…

基于yolov8的106种鲜花识别花朵检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的106种鲜花识别花朵检测系统是一项融合了先进深度学习技术的创新应用。该系统利用YOLOv8算法&#xff0c;这一目前最先进的目标检测模型之一&#xff0c;实现了对106种不同花卉的快速、准确识别。 YOLOv8以其速度快、准确性高和鲁棒性强的特点&#…

模拟算法专题——算法介绍算法讲解力扣实战应用

目录 1、模拟算法介绍 2、算法应用【leetcode】 2.1 替换所有的问号 2.1.1 算法思想 2.1.2 算法代码 2.2 提莫攻击 2.2.1 算法思想 2.2.2 算法代码 2.3 Z字形变换 2.3.1 算法思想 2.3.2 算法代码 2.4 外观数列 2.4.1 算法思想 2.4.2 算法代码 2.5 数青蛙 2.5.1 算…

复旦NLP团队新作:大规模语言模型从理论到实践PDF版

2022 年 11 月&#xff0c;Chat GPT 的问世展示了大语言模型的强大潜能&#xff0c;并迅速引起了广泛关注。Chat GPT 能够有效理解用户需求&#xff0c;并根据上下文提供恰当的回答。它不仅可以进行日常对话&#xff0c;还能够完成复杂任务&#xff0c;如撰写文章、回答问题等。…

测试工程师学历路径:从功能测试到测试开发

现在软件从业者越来越多&#xff0c;测试工程师的职位也几近饱和&#xff0c;想要获得竞争力还是要保持持续学习。基本学习路径可以从功能测试-自动化测试-测试开发工程师的路子来走。 功能测试工程师&#xff1a; 1、软件测试基本概念&#xff1a; 学习软件测试的定义、目的…

Cubase里如何使用效果器插件?

Cubase里如何使用效果器插件&#xff1f;具体操作步骤如下&#xff1a; 1、首先&#xff0c;在你的电脑上打开Cubase软件。进入页面后&#xff0c;单击菜单栏上的设备以进入插件管理器&#xff0c;如下所示&#xff0c;然后继续下一步。 2、接下来&#xff0c;弹出插件管理器窗…

银行业智能化转型:智能客服的崛起与挑战

更多内容个人网站&#xff1a;孔乙己大叔 在当今这个科技日新月异的时代&#xff0c;银行业作为传统金融业的支柱&#xff0c;正经历着一场前所未有的变革。智能客服的兴起&#xff0c;不仅重塑了银行的服务模式&#xff0c;也深刻影响着银行员工的职业生涯。这场由技术驱动的变…