redis如何保证缓存一致性

方式一:先更新数据库,再更新缓存场景


当有两个线程A、B,同时对一条数据进行操作,一开始数据库和redis的数据都为tony,当线程A去修改数据库,将tong改为allen,然后线程A在修改缓存中的数据,可能因为网络原因出现延迟,这个时候线程B,将数据修改成了Mike、然后将数据库中的tony,也改成了Mike,然后线程A恢复正常,将redis中的缓存改成了allen,此时就出现了缓存数据和数据库数据不一致情况。不推荐

方式二:先更新缓存,再更新数据库场景


当有两个线程A、B,同时对一条数据进行操作,线程A先将redis中 的数据修改为了allen,然后CPU切换到了线程B,将redis中的数据修改为了mike,然后将数据库中的信息也修改了mike,然后线程A获得CPU执行,将数据库中的信息改为了allen,此时出现缓存和数据库数据不一致情况。不推荐

方式三:先删除缓存,再更新数据库的场景


当有两个线程A、B,同时对一条数据进行操作,当线程A进行修改缓存操作时,先删除掉缓存中的数据,然后去修改数据库,因为网络问题出现延迟,这时线程B需要去数据库中查询数据为tony,然后将数据更新到缓存中,线程A网络恢复,又将数据库数据修改为了allen,此时出现数据不一致。不推荐

方式四:先更新数据库,在删除缓存场景


一改一查场景:

当有两个线程A、B,线程A先去将数据库的值修改为allen,然后需要去删除redis中的缓存,当线程B去读取缓存时,线程A已经完成delete操作时,缓存不命中,需要去查询数据库,然后在更新缓存,数据一致性;如果线程A没有完成delete操作,线程B直接命中,返回的数据与数据库中的数据不一致,可能会短暂出现数据不一致情况,但最终都会一致。推荐

存在的问题:当数据过期或者初始化时,会出现数据不一致情况,也就是线程B从数据库中,查询到数据为tony,然后线程A将tony修改为了allen,然后去删除redis中的数据,然后线程B将读到的tony,更新到了数据库中,出现了数据不一致问题。

解决方案:对于不过期的数据我们要在上线的时候做好数据的预热,保证缓存命中。对于存在过期的数据,因为有过期时间,只会在特定的时间段内数据不一致,下次数据过期后,可以恢复,对于实时性要求不高时,可以接受。

两次修改场景:

当有两个线程A、B,线程A去修改数据库中的值改为allen,然后出现网络波动,线程B将数库中的值修改为了Mike,然后两个线程都会删除缓存,保证数据一致性。

方式五:最佳实现,数据异步同步


Canal:基于数据库增量日志解析,提供增量数据订阅和消费https://github.com/alibaba/canal

mysql会将操作记录在Binary log日志中,通过canal去监听数据库日志二进制文件,解析log日志,同步到redis中进行增删改操作。

canal的工作原理:canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议;MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal );canal 解析 binary log 对象(原始为 byte 流)。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Fiddler抓包工具——学习笔记

F12抓包 302【重定向】:当你发送了一个请求之后,那么这个请求重定向到了另外的资源 跳转和重定向的区别: 跳转是会把数据传到新的地址 重定向不会把新的数据传到新的地址 使用F12抓包时一定要打开Preserve Log开关,作用是保留…

4核8G服务器性能如何?4核8G12M服务器能承受多少人访问?

腾讯云轻量4核8G12M服务器配置446元一年,646元12个月,腾讯云轻量应用服务器具有100%CPU性能,系统盘为180GB SSD盘,12M带宽下载速度1536KB/秒,月流量2000GB,折合每天66.6GB流量,超出月流量包的流…

KKView远程控制: todesk内网穿透

Todesk内网穿透:实现远程访问的新途径 在数字化时代,远程访问已成为许多企业和个人的基本需求。Todesk作为一款远程桌面控制软件,其内网穿透功能为用户提供了便捷、安全的远程访问体验。本文将介绍Todesk内网穿透的原理、应用场景及其优势&a…

python 基础知识点(蓝桥杯python科目个人复习计划64)

今日复习内容:做题 例题1:蓝桥课程抢购 问题描述: 为了能让更多的同学学到IT技术,蓝桥云课又开始了课程限时打折活动。 作为初学者的你,希望尽可能买到含金量总额更高的课程,当然其他同学也是这么想。 …

健康消费需求持续上涨,品牌如何抓住机遇

近年来,国内“大健康”时代徐徐展开,居民消费热度不断攀升,主动健康消费已经成为新的增长点,然而健康行业的内容由于专业性较高,传播范围有限导致无法直接触达用户。在当下的传播环境中,品牌应该如何抓住机…

HPA数据库及HPAanalyze包使用

关于HPA数据库的介绍:Human Protein Atlas 数据库 – 王进的个人网站 (jingege.wang) The Human Protein Atlas 文献 HPAanalyze: an R package that facilitates the retrieval and analysis of the Human Protein Atlas data | BMC Bioinformatics | Full Text …

H5 流光分割个人主页源码

源码名称:流光分割个人主页源码 源码介绍:一款流光分割特效个人主页源码,源码带大量跳转个人联系方式按钮和朋友按钮。同时带有个人介绍。 需求环境:H5 下载地址: https://www.changyouzuhao.cn/10241.html

LeetCode每日一题 将有序数组转换为二叉搜索树(分治)

题目描述 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵平衡二叉搜索树。 示例 1: 输入:nums [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释:[0,-10,5,null,-3,null,9] 也将被视…

林木园区改造VR仿真培训课件提高人们的专业素质

森林经营VR模拟体验摆脱了传统森林经营周期长、实践难及耗材大等问题,借助VR虚拟仿真技术为人们提供一种全新的、沉浸式的森林经营体验,让人们更好地了解森林经营的全周期。 提高人们的环保意识 通过亲身参与森林经营的过程,人们可以更直观地…

mysql: 如何开启慢查询日志?

1 确认慢查询日志功能已开启 执行以下sql语句,查看慢查询功能是否开启: show VARIABLES like slow_query_log;如果为ON,表示打开;如果为OFF,表示没有打开,需要开启慢查询功能。 执行以下sql语句&#xff0…

【MATLAB源码-第163期】基于matlab的BPSK+瑞利(rayleigh)信道下有无波束成形误码率对比仿真。

操作环境: MATLAB 2022a 1、算法描述 在通信系统中,波束成形(Beamforming)技术是一种广泛使用的信号处理技术,通过调整天线阵列中各个元素的相位和幅度,使得信号在特定方向上增强,在其他方向…

CC连接过程

1、CC线连接过程 DFP和UFP会实时监控CC1和CC2引脚的电压,来评估DFP和UFP是否都已经在位。同时DFP可以根据电压确定自己所能提供的电流的大小 2、连接过程 Source端使用一个MOS管去控制Vbus,初始状态下,FET为关闭状态,Vbus不通。S…

Transformer的前世今生 day01(预训练

预训练 在相似任务中,由于神经网络模型的浅层是通用的,如下图: 所以当我们的数据集不够大,不能产生性能良好的模型时,可以尝试让模型B在用模型A的浅层基础上,深层的部分自己生成参数,减小数据集…

SQL面试学习 行列转换

行列转换 多行转多列 concat_ws:把集合中的值用指定分隔符连接 collect_set():收集唯一值并返回一个集合 SQL字符串拼接函数concat()、collect_set()、collect_list()和concat_ws()用法 cast()将任何类型…

微信小程序开发学习笔记《21》uni-app框架-楼层图片跳转

微信小程序开发学习笔记《21》uni-app框架-楼层图片跳转 博主正在学习微信小程序开发,希望记录自己学习过程同时与广大网友共同学习讨论。建议仔细阅读uni-app对应官方文档 一、创建新的分包goods_list 二、将请求到的楼层数据url调整为本地的 可以看到上图是请求…

14 stack和queue的使用

stack的介绍 stack文档 1.stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入和提取操作 2.stack是作为容器适配器被实现的,容器适配器是对特定类封装作为其底层的容器,并提供…

使用 Docker Compose 快速搭建监控网站 uptime-kuma

有时候需要监控自己搭建的一些网站、服务是否正常运行, 这时候可以考虑使用一个监控网站, 定时的进行检测, 记录网站、服务的运行状态, 在这推荐使用 uptime-kuma。 博主博客 https://blog.uso6.comhttps://blog.csdn.net/dxk539…

计算机毕业设计-基于大数据分析的服装定制网的设计与实现

概要 人民的日常生活离不开“衣食住行”,四者之中“食住行”发展迅猛,突飞猛进的发展推动了产业的升级更新。而与之形成鲜明对比的是,服装行业作为传统古老的行业,因为产业结构特征、个性化需求等问题,难以出现推动行业…

支小蜜AI校园防欺凌系统可以使用在宿舍吗?

随着人工智能技术的快速发展,AI校园防欺凌系统已成为维护校园安全的重要手段。然而,关于这一系统是否适用于宿舍环境,仍存在一些争议和讨论。本文将探讨AI校园防欺凌系统在宿舍中的适用性,分析其潜在的优势与挑战,并提…

iptables详细介绍

在 CentOS 中,iptables 是一种用于配置和管理网络防火墙的工具,它提供了一种灵活和强大的方式来控制进出服务器的网络流量。以下是 CentOS 中 iptables 的主要内容: 规则链(Chains): iptables 使用规则链来组织规则,常见的链包括: INPUT:处理进入服务器的数据包。OUTP…