真实遇到Redis双写一致性问题

news2024/9/20 22:50:55

今天工作中接到一个bug,产品那边描述, 在后台添加一个供应商后前台无法展示。 是个例还是全部?他说应该是个例。

开始分析。。。。。。。

  • 首先数据库查询可以查出新添加的这个供应商的,说明添加成功的,唯一的问题肯定就是缓存那里出问题。

结合代码分析出下面两幅流程图

  • 供应商更新流程图如下图

在这里插入图片描述

乍一看没问题呀!

  • 查询供应商流程图如下图所示

在这里插入图片描述

从图中可以分析得出,不展示肯定是走了下面这个路线。

在这里插入图片描述

为什么会走这一条路线?
只有一个原因,那就是数据库更新成功的后,Redis没有删除。

在这里插入图片描述

查看日志并没有报错,可能是网络或其他原因导致Redis没有删除成功。而且此时Redis里面又恰好有一条超过7天的冗余数据,就导致上诉情况。

解决办法。

  • 一,直接手动删除缓存,简单粗暴(确实也是采用这种方法)
  • 二,给Redis里面供应商key设置7天过期时间,这样还不需要来一次判断,​减少代码量。

后来下班后和组长交流这个问题​?
他问我一个问题,可不可以在添加供应商的流程里面加事务?以保证更新数据库和删除缓存的原子性。如果可以添加事务,那么他们之前为什么不添加​?
我的答案就不说啦,说一说组长的答案​。
那是因为如果添加事务,那么当你刷新缓存的时候事务没有提交,刷的还是旧数据,当事务结束后,​缓存依然没有更新到。

回到我们的这个bug,我回来想了想,针对这个添加供应商的流程我认为可以添加事务的,因为我们并不是刷新缓存而是删除缓存,真正更新缓存是在第一次查询的时候​。​你们觉得呢?​

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

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

相关文章

Baltamatica 北太天元 —— 基于模拟退火算法的旅行商问题

文章目录 北太天元(Baltamatica)简介Baltamatica 复现基于Matlab的旅行商问题问题描述模拟退火算法Metropolis准则算法流程图: Demo1:只考虑累计距离,通过模拟退火算法求解最短路径matlab代码:Baltam代码&a…

Go 语言基础语法:Hello World 实例(涉及定义变量;fmt 包、Print、Println、Printf)

Hello world实例 package mainimport "fmt"func main() {fmt.Println("Hello, World!") } 编译 运行 go run hello.go Hello, World! go run 做了编译和执行两动作,编译会生成 hello 文件,执行完成后此文件会被删除。 web展示 …

STM32外设系列—L298N

文章目录 一、L298N简介二、L298N电路图三、L298N使用方法四、L298N驱动电机实例4.1 麦克纳姆轮简介4.2 定时器PWM配置4.3 智能车行驶控制 五、拓展应用 一、L298N简介 L298N是SGS公司生产的一款通用的电机驱动模块。其内部包含4路逻辑驱动电路,有两个H桥的高电压大…

java并发编程 3:synchronized与锁(重点)

目录 共享问题synchronized锁及使用synchronized代码块synchronized 修饰成员方法synchronized 修饰静态方法 变量的线程安全分析成员变量和静态变量是否线程安全局部变量是否线程安全常见线程安全类 synchronized底层原理Java对象头Monitor管程字节码看原理 锁状态及转换四种锁…

vscode 快速修复(quick fix) 快捷键(Ctrl + .)被占用问题解决方法

vscode 快速修复(quick fix) 快捷键(Ctrl .)被占用 微软拼音的中/英文标点切换的快捷键为Ctrl .,与 vscode 快速修复(quick fix)快捷键冲突。修复方法如下: 切换到微软拼音,在输入法中或英字上,点击右键。 再点设置 - 按键。 …

MTK平台WLAN的Roaming机制和案例log解析

一 、WLAN漫游简介 [百度百科]:当网络环境存在多个相同SSID的AP,且它们的微单元互相有一定范围的重合时,无线用户可以在整个WLAN覆盖区内移动,无线网卡能够自动发现附近信号强度最大的AP,并通过这个AP收发数据,保持不间断的网络连接,这就称为无线漫游。 简单来说:WLA…

Flink中时间和窗口

文章目录 一、时间定义二、水位线(Watermark)1、概念2、水位线特征3、生成水位线3.1 水位线生成策略(Watermark Strategies)3.2 Flink 内置水位线生成器3.3 自定义水位线策略 4、水位线的传递 三、窗口(Window)1、概念2、窗口分类2.1 驱动类型分类2.2 窗…

chatgpt赋能python:Python输入之后的运行过程

Python输入之后的运行过程 在Python中,输入是必不可少的一部分,它使我们能够更加交互和动态地使用这门语言。在本篇文章中,我们将介绍Python输入的运行过程,包括如何读取和处理输入以及输入与程序运行的交互方式。 什么是Python…

ZLMediaKit 的安装及使用介绍

ZLMediaKit 介绍 ZLMediaKit是一个基于C开发的开源流媒体服务器。它提供了高性能的音视频处理能力,支持常见的流媒体协议,如RTSP、RTMP、HLS和HTTP-FLV,并且具有低延迟和高并发处理能力。 开源地址:https://github.com/xia-chu/…

抖音seo账号矩阵系统源码代开发组件

一.开发矩阵系统的项目背景: 目录 一.开发矩阵系统的项目背景: 二.短视频矩阵系统SaaS模板组件通常包含以下几个方面的内容: 三.抖音SEO账号矩阵系统源码的技术搭建过程可以分为几个步骤: 1.确定系统的需求和目标&#xff0c…

DFS深度优先搜索

目录 一、DFS的概念DFS的定义DFS的搜索方式DFS采用的数据结构DFS的特点 二、DFS的实战应用1.排列数字2.n-皇后问题 一、DFS的概念 DFS的定义 DFS(Depth-First Search)深度优先搜索,是一种常用的图遍历算法,用于在图或树数据结构…

金蝶云星空财务软件被locked勒索病毒攻击后如何更快解密数据库数据?

金蝶云星空财务软件是一款广泛应用于企业财务管理领域的软件,然而,近期很多企业的金蝶云星空财务软件遭受到了locked勒索病毒的攻击,导致数据库数据被加密。而这次的locked勒索病毒采用了新的加密形式,它不仅能够扫描出各种软件系…

数据结构--顺序表VS链表

数据结构–顺序表VS链表 逻辑结构 存储结构 顺序表: 优点:支持随机存取、存储密度高 缺点:大片连续空间分配不方便,改变容量不方便 链表: 优点:离散的小空间分配方便,改变容量方便 缺点:不可随机存取,存储密度低 基本…

从零开始 Spring Boot 49:Hibernate Entity Lifecycle

从零开始 Spring Boot 49:Hibernate Entity Lifecycle 图源:简书 (jianshu.com) 本文将介绍 Hibernate 的 Session 接口,以及如何用 Session 的相关 API 转换实体(Entity)的生命周期状态。 如果缺少的 JPA 和 Hiberna…

ubuntu18.04 ros报错Command ‘roscore‘ not found

问题描述 git clone https://github.com/ros/catkin.gitcd catkingit branch melodic-develgit checkout melodic-develmkdir buildcd buildcmake …make -j8 && sudo make installcd .. sudo python2 setup.py installsudo python3 setup.py install出现问题 hua…

ADB命令(app自动化测试底层技术)

一、adb相关知识体系 1,adb的使用场景 操作手机设备 app自动化测试2,adb测试体系 app自动化测试-appium 遍历测试-appcrawier app性能测试 app专项测试 STF设备管理平台 云测平台 兼容性测试 二、adb 基础 1,什么是adb Adb是用来操作Andro…

spark、pyspark 常用的模版 demo 网址

1、我自己有时候用百度或者其他的搜索出来的spark 常用案例,质量有的好有的差有时候就很烦。特地分享一个我常用的质量高的网站地址 https://sparkbyexamples.com/pyspark/pyspark-collect/

进阶2:JVM 启动参数

目录 jvm启动参数 参数分类 系统属性 功能解析 运行模式 jvm有两种运行模式 堆内存 设置堆内存 GC相关 GC 日志相关的参数 分析诊断 指定垃圾收集器相关参数 JavaAgent 什么是Java agent 常见问题 视频 前言 这堂课程不用过多的记忆,自身有印象即可…

Vue中Object.defineProperty

放到Object.defineProperty中比直接写在person对象中更灵活&#xff0c;可以设置的属性更多 <script>let person{name:张三,age:男}Object.defineProperty(person,age,{value:18,enumerable:true, //控制属性是否可以被枚举&#xff0c;默认值是falsewritable:true, //控…

无人机动力测试台-15公斤级-Flight Stand 15

Flight Stand 15测试台通过测量电机和螺旋桨的拉力、扭矩、转速、电流、电压、温度、螺旋桨效率和电机效率来精准地描述和评估无人机动力系统的性能。 产品应用 Flight Stand 15测试台可以用于以下方向&#xff1a; 实时动态测试 FS15 Pro的1000 Hz采样率使测试成为可能&…