首页 > 其他分享 >缓存一致性问题

缓存一致性问题

时间:2023-07-26 23:34:07浏览次数:43  
标签:缓存 DB 更新 问题 线程 一致性 抢到 CPU

 

  

更新

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

  存在的问题:如果缓存更新成功,但DB更新失败 -> DB回滚 && 缓存回滚

    缓存中的数据为脏数据

 

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

  存在的问题:

    

    

    线程A 与 线程B 同时操作数据A:

      线程A抢到CPU资源,更新DB =1;

      线程B抢到CPU资源,更新DB=2 && 更新缓存=2;

      线程A抢到CPU资源,更新缓存=1(脏数据)

 

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

  存在的问题:

    

    

    

    

    

    线程A 与 线程B 同时操作数据A:

      线程A抢到CPU资源,删除缓存;

      线程B抢到CPU资源,发现缓存不存在 && 读取DB旧值=1;

      线程A抢到CPU资源,更新DB=2;

      线程B抢到CPU资源,更新缓存=1(脏数据)

 

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

  正常流程:

    

      

      线程A 和 线程B 同时操作数据A:

        线程A抢到CPU资源,查询DB=1;                        

        线程B抢到CPU资源,更新DB=2;

        线程A抢到CPU资源,更新缓存=1;        

        线程B抢到CPU资源,删除缓存;

      

  可能存在的问题(概率很小):

    

      线程A 和 线程B 同时操作数据A:

        线程A抢到CPU资源,查询DB=1;                         -- 一般读DB的速度 比 写DB速度快,很小概率 

        线程B抢到CPU资源,更新DB=2 && 删除缓存;

        线程A抢到CPU资源,更新缓存=1(脏数据)

 

 

 

 

 

    

 

 

  

标签:缓存,DB,更新,问题,线程,一致性,抢到,CPU
From: https://www.cnblogs.com/anpeiyong/p/17583797.html

相关文章

  • 问题--如何自定义化新标签页?
    1.问题平时的新标签页过于单调,且不好使用,问题如题所示2.解决方式使用扩展InfinityNewTab,这是Google的一款扩展软件安装路径:https://chrome.google.com/webstore/detail/infinity-new-tab/dbfmnekepjoapopniengjbcpnbljalfg/related可以自由的设计自己的新标签页如图所示......
  • 重复点击路由跳转报错的问题
    在router中重写pushVueRouter.prototype.push=function(location,resolve,reject){if(resolve&&reject){orginPush.call(this,location,resolve,reject)}else{orginPush.call(this,location,()=>{},()=>{})}}letor......
  • 问题记录:maven
    1、maven构建的聚合工程在给其中一个模块打包时报错原因:该模块依赖于另一个模块,父工程未将各模块聚合起来解决:父工程需clean、install,将父工程以及各模块jar包打到本地仓库参考:https://zhuanlan.zhihu.com/p/138791201......
  • 背包问题
    (1)01背包01背包二维#include<iostream>#include<algorithm>usingnamespacestd;constintN=1010;intn,m;intv[N],w[N];//v保存体积,w保存价值intf[N][N];//保存所有集合最值状态intmain(){cin>>n>>m;for(inti=1;i<=n......
  • 浅谈Excel开发:十 Excel 开发中与线程相关的若干问题
    采用VSTO或者SharedAdd-in等技术开发Excel插件,其实是在与Excel提供的API在打交道,Excel本身的组件大多数都是COM组件,也就是说通过ExcelPIA来与COM进行交互。这其中会存在一些问题,这些问题如果处理不好,通常会导致在运行的时候会抛出难以调试的COM异常,从而导致我们开发出的Excel插......
  • Xcode12 开发12.5.7版本IOS的问题解决
    1.xcode12默认是创建的工程是14.2,所以需要修改一下工程版本。点击项目最上面的蓝色文件就可以打开下面的界面了。2.安装app之后,界面黑屏。解决方法如下:在AppDelegate.h中:#import<UIKit/UIKit.h>@interfaceAppDelegate:UIResponder<UIApplicationDelegate>//增......
  • mysql使用default给列设置默认值的问题
    add column会修改旧的默认值add column和modify column在default的语义上处理不一样。对于addcolumn,会将历史为null的值刷成default指定的值。而对于modifycolumn,只会对新数据产生影响,历史数据仍然会保持为null。结论:1. add column和modify column在default的语义上......
  • Java并发(十三)----共享存在的问题
    1、小故事老王(操作系统)有一个功能强大的算盘(CPU),现在想把它租出去,赚一点外快小南、小女(不同的线程)来使用这个算盘来进行一些计算,并按照时间给老王支付费用但小南不能一天24小时使用算盘,他经常要小憩一会(sleep),又或是去吃饭上厕所(阻塞io操作),有时还需要一根烟,没烟时思路......
  • HashMap非线程安全到底有什么问题
    HashMap是Java中常用的数据结构,用于存储键值对,并且提供了快速的查找和插入操作。下面挖掘一下HashMap内部的架构设计思维:哈希函数的设计:HashMap使用哈希函数将键映射到数组索引上。好的哈希函数应该尽量减少哈希冲突,使得键能够均匀地分布在数组中,从而提高查找效率。Java中的Hash......
  • UG NX实现叉车运输货物功能遇见的问题
    在前一段时间编写模拟叉车运输功能时遇到,货物无法跟随的问题(如下动图)后面发现是速度太快的原因导致货物没有跟着动,类似于抽桌布的感觉解决办法有两种:第一种解决办法很简单就是把速度降低到不超过 200mm/s就可以了(解决后如下图)第二种解决办法是在对速度有高要求的情况下......