Redis数据库双写一致性解决方案


程序员的公众号:源1024,获取更多资料,无加密无套路!

最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等
获取方式: 关注公众号并回复 666 领取,更多内容持续奉上


缓存可以提升性能,减轻数据库压力,同时,也存在一些新的问题,如缓存和数据库之间的数据一致性问题。

  1. 先更新缓存,再更新数据库

    问题:如果缓存更新成功,数据库更新失败,导致数据不一致

  2. 先更新数据库,再更新缓存

    问题:如果数据库更新成功,更新缓存失败,导致数据不一致

  3. 先删除缓存,再更新数据库

    问题:如果删除缓存成功,更新数据库失败,此时新的请求读取到数据库中的旧数据更新到缓存中,这样好像数据库与缓存中的数据是一致的。但是如果在高并发环境下,极端情况还是会导致数据不一致问题的(比如同时进来的两个请求,一个写请求,一个读请求,写请求删除缓存,并且成功更新主库的数据,但还没同步给从库,读请求就判断缓存为空,去从库里读取数据,拿到旧数据后写入缓存,随后写请求将新数据同步给从库,就导致了缓存和数据库不一致问题)

  4. 先更新数据库,再删除缓存

    问题:更新数据库成功,删除缓存失败,导致数据不一致

解决方案

  • 延迟双删

延迟双删策略是分布式系统中数据库存储和缓存数据保持一致性的常用策略,但它不是强一致的。

实现:先删除缓存然后更新数据,在最后延迟 N 秒再去执行一次缓存删除(这里设置的N秒主要是保证读请求结束,写请求可以删除读请求造成的缓存脏数据,N需要根据实际情况评估);如果第二次缓存删除失败,可以考虑将需要删除的key发送给消息队列,通过消费重试,直到删除成功。

  • ​MQ重试删除

更新完数据库之后进行删除,如果删除失败则向MQ发送一条消息,然后消费者不断进行删除尝试。

  • binlog异步删除

实现:低耦合的解决方案是使用canal。更新数据库,会把操作信息记录在binlog日志中,canal监听主机mysql的二进制文件,当数据发生变化时发送给MQ,最终消费进行删除。

 系列文章索引

MyBatis的插件能在哪些地方进行拦截?

了解MyBatis的缓存机制吗

面试官:谈谈对volatile的理解

Spring中用到了哪些设计模式

面试官:说一下SQL的执行过程

线程池的工作原理

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

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

相关文章

好用的企业防泄密软件盘点

企业防泄密软件是专门设计用于保护企业敏感信息不被泄露的软件产品。这类软件通常采用多种安全技术和策略,以增强企业数据的安全性和保密性,防止核心知识产权和商业机密的泄露。 企业防泄密软件的主要功能包括数据加密、访问控制、审计和监控、文件和数据…

CSS样式穿透

当我们在vue项目中使用第三方组件时,有时候需要去修改某些元素的样式,但有时写的css样式不会覆盖组件的样式,所以要用到样式穿透。 常用的方法有这几种:(1)>>> (2)/deep/ …

flink中配置Rockdb的重要配置项

背景 由于我们在flink中使用了状态比较大,无法完全把状态数据存放到tm的堆内存中,所以我们选择了把状态存放到rockdb上,也就是使用rockdb作为状态后端存储,本文就是简单记录下使用rockdb状态后端存储的几个重要的配置项 使用rockdb状态后端…

电子器件系列44:环形线圈电感

干货!电感最重要、最常见的几个作用_线圈 环形线圈电感的原理: 电感中包含了哪三个物理学定律,为什么它能以磁场形式储能_哔哩哔哩_bilibili 电感的基本原理_哔哩哔哩_bilibili 环形线圈电感的作用: 1.储能器: 环形线圈电感能够…

【Python大数据笔记_day10_Hive调优及Hadoop进阶】

hive调优 hive官方配置url: Configuration Properties - Apache Hive - Apache Software Foundation hive命令和参数配置 hive参数配置的意义: 开发Hive应用/调优时,不可避免地需要设定Hive的参数。设定Hive的参数可以调优HQL代码的执行效率,或帮助定位问…

005.存储管理

使用硬盘设备前需要对其进行分区、格式化,分区可以使公司业务数据得到更有效的管理。我们需要提前规划好硬盘的存储空间,至于一块硬盘到底要分多少个区,每个分区预留多大空间,这需要根据文件数量、大小、类型等进行对应的设计。有…

c语言:解决判断两个字符串是不是互为旋转字符的问题

题目: 思路:先判断两个字符长度是否相等,如果不相等,肯定不是互为旋转字符串。 方法一:将第一份字符串右旋0-n(字符个数)次,判断是否有一次右旋完的字符串等于第二个字符串。如果有&…

MIKE水动力笔记19_统计平均潮差

本文目录 前言Step 1 ArcGIS中创建渔网点Step 2 将dfsu数据提取到渔网点Step 3 Python统计平均潮差 前言 日平均潮差(average daily tidal range):日高潮潮高合计之和除以实有高潮个数为日平均高潮潮高,日低潮潮高合计之和除以实…

剑指offer(C++)-JZ39:数组中出现次数超过一半的数字(算法-其他)

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个…

Taro.navigateTo 使用URL传参数和目标页面参数获取

文章目录 1. Taro.navigateTo 简介2. 通过 URL 传递参数3. 目标页面参数获取4. 拓展与分析4.1 拓展4.2 URL参数的类型4.3 页面间通信 5. 总结 🎉欢迎来到Java学习路线专栏~Taro.navigateTo 使用URL传参数和目标页面参数获取 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x…

C语言--写一个函数返回bool值,来判断给定的字符串A和B(假设都是小写字母),是否是B中的字符都存在于A中,如果是返回true,否则返回false

一.题目描述 写一个函数返回bool值,来判断给定的字符串A和B(假设都是小写字母),是否是B中的字符都存在于A中,如果是返回true,否则返回false。例如: 字符串A:abcde 字符串B&#xff…

搭建yum源并定时同步

一 、安装yum源 1-准备yum目录 cd /data/www/html createrepo -v ./目录 2-安装服务 yum -y install httpd 3-配置服务 /etc/httpd/conf/httpd.conf 4.配置/etc/yum.repo.d/local.rpeo 二、定时更新yum源 #1. 同步整个源到指定目录 [rootV10SP1-1 pac]# reposync -p /root/…

井盖位移监测,智能井盖传感器

在每一个繁华的城市背后,总是有一些默默无闻的英雄。这些英雄或是人或是物,对城市未来建设和城市生命线来讲意义重大。其中井盖作为不可或缺的一部分,默默守护着道路安全与公共安全。它的状态却直接关系到我们的生活便利与安全。近年来随着科…

P2341 [USACO03FALL / HAOI2006] 受欢迎的牛 G

模板记录 #include<bits/stdc.h> #define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define endl "\n" #define x first #define y second #define int long long using namespace std; typedef long long ll; typedef pair<int, int> …

Arduino项目式编程教学前言

前言–先聊聊我的经历 在停更数年之后&#xff0c;还是打算重新开启Arduino编程教学这一项目&#xff1b;这几年间&#xff0c;我从Arduino编程开发教学&#xff0c;转到C及python教学&#xff0c;又到如今的高中数学教学&#xff0c;跨度竟如此之大&#xff0c;但始终未脱离教…

在通用jar包中引入其他spring boot starter,并在通用jar包中直接配置这些starter的yml相关属性

场景 我在通用jar包中引入 spring-boot-starter-actuator 这样希望引用通用jar的所有服务都可以直接使用 actuator 中的功能&#xff0c; 问题在于&#xff0c;正常情况下&#xff0c;actuator的配置都写在每个项目的yml文件中&#xff0c;这就意味着&#xff0c;虽然每个项目…

ArcGIS创建格网

目录 1、创建网格 2、裁剪边界外的网格 3、只保留边界内完整的网格 1、创建网格 首先&#xff0c;我们在创建渔网前&#xff0c;需要指定渔网覆盖的范围。这里我们就以四子王为例 在ArcMap软件中&#xff0c;我们依次选择“Toolboxes”→“Data Management Tools&#xff0…

【漏洞复现】用友移动管理系统文件上传

漏洞描述 用友移动系统管理旧版本uploadApk接口存在任意文件上传&#xff0c;攻击者可在无需登录的情况下上传恶意文件&#xff0c;执行任意命令 免责声明 技术文章仅供参考&#xff0c;任何个人和组织使用网络应当遵守宪法法律&#xff0c;遵守公共秩序&#xff0c;尊重社…

Line多账号如何运营?

Line在亚洲地区非常流行&#xff0c;特别是在日本、台湾、泰国等地&#xff0c;是当地最受欢迎的即时通讯应用之一。 除了基本的聊天功能外&#xff0c;Line还提供了各种各样的贴图、表情包和游戏等娱乐功能&#xff0c;吸引了大量的用户。 一、选择利用line进行海外营销的原…

【蓝桥杯选拔赛真题23】C++计算24 第十二届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析

C/C++计算24 第十二届蓝桥杯青少年创意编程大赛C++选拔赛真题 一、题目要求 1、编程实现 “计算 24”是一个流传已久的数字游戏,小蓝最近对此痴迷不已 游戏规则是:从 1~10 之间的自然数任意拿出 4 个数(4 个数各不相同,顺序随机),进行加、减、乘三种运算(使用某种运算…