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

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

答案:方案1

方案2存在问题

查询与更新并发,更新操作先删除了缓存,还未更新数据库,查询操作未取到缓存,直接查询了数据库,这时候数据库还未更新,取到了脏数据,然后把脏数据放到了缓存,后续请求取到都是脏数据。

方案1

查询与更新并发,更新操作,数据库执行成功,但缓存未删除,此时进来查询的走缓存,取到了脏数据,但是等删除缓存也执行完成,后面的请求就会取数据库正确的数据,再放入缓存,这样后续的请求,取到的数据都是正确数据。

参考:

分布式系统知识点十二:更新数据时,是先删除缓存再更新DB,还是先更新DB再删除缓存?(转载) - 掉头发的666 - 博客园

更新数据,删除缓存,更新数据库谁先执行相关推荐

  1. 掌握分布式环境缓存更新策略,提高缓存与数据库双写一致性!

    概述 随着时代的发展,服务系统架构也已经由最初的单体架构转变为分布式.微服务架构模式. 从数据体量上来看,各系统存储的数据量越来越大,数据的查询性能越来越低. 此时,就需要我们不断的进行优化,最常用的 ...

  2. fastapi PUT更新数据 / PATCH部分更新

    文章目录 1. PUT 更新 2. 用 PATCH 进行部分更新 learn from https://fastapi.tiangolo.com/zh/tutorial/body-updates/ 1 ...

  3. 【GVA】gin gorm多对多many2many更新数据时级联更新关联表数据的正确写法

    如果您想要更新关联的数据,您应该使用 FullSaveAssociations 模式: true}).Updates(&user) // ... // INSERT INTO "ad ...

  4. oracle主从表分离怎么实时更新数据_高可用数据库主从复制延时的解决方案

    MySQL主从复制的延时一直是业界困扰已久的问题.延时的出现会降低主从读写分离的价值,不利于数据实时性较高的业务使用MySQL. UDB是UCloud推出的云数据库服务,上线已达六年,运营了数以万计的 ...

  5. oracle主从表分离怎么实时更新数据_高可用数据库UDB主从复制延时的解决

    MySQL主从复制的延时一直是业界困扰已久的问题.延时的出现会降低主从读写分离的价值,不利于数据实时性较高的业务使用MySQL. UDB是UCloud推出的云数据库服务,上线已达六年,运营了数以万计的 ...

  6. viewpager fragment FragmentStatePagerAdapter数据删除后更新界面

    private class MyAdapter extends FragmentStatePagerAdapter{ .......................省略................ ...

  7. python爬虫实时更新数据_Python爬虫 更新中

    基础 一.环境配置 查看已安装的包 pip freeze 导出 pip freeze >requirements.txt 安装 pip install -r requirements.txt - ...

  8. java mybatis 批量更新数据_Mybatis批量更新详解

    转:http://www.cnblogs.com/winkey4986/p/3915151.html Mybatis批量更新 批量操作就不进行赘述了.减少服务器与数据库之间的交互.网上有很多关于批量插 ...

  9. 如何删除计算机自动更新补丁,删除自动更新中的WIN10升级补丁

    先试试吧,毕竟微软仍然控制着我们的电脑,嗯,应该是电脑中的windows.要把windows内已经下载好的Win10升级文件删除,就去"已安装的更新"中,将KB3035583.KB ...

  10. mysql循环更新数据_大批量更新数据mysql批量更新的四种方法

    mysql 批量更新如果一条条去更新效率是相当的慢, 循环一条一条的更新记录,一条记录update一次,这样性能很差,也很容易造成阻塞. mysql 批量更新共有以下四种办法 1..replace i ...

最新文章

  1. Codeforces 895C - Square Subsets
  2. 成员函数 静态变量做默认参数_Scala系列 (二)Scala的独有特性提高开发效率学会之后玩转函数式与OOP!!...
  3. Linux学习总结(二) 网络配置-NAT方式静态IP配置篇
  4. Quartz.Net分布式任务管理平台
  5. Docker 从Dockerfile 构建镜像 :build 命令的用法
  6. 控件事件的发生与页面加载的关系
  7. JavaScript数据结构和算法简述——前言
  8. 绮莉:一个超爱团队,为团队疯狂打call的少女
  9. 深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
  10. 桌面计算机主流硬盘接口,M.2和U.2谁更好?主流硬盘接口大扫盲
  11. 计算机打不开sai文件夹,无法运行 SAI2 的解决办法
  12. day 09 学习Python——Python模块读取xls、slx文件,python发邮件
  13. 2020年基金收益盘点
  14. Android之设备加密
  15. Python_Dataframe_去除重复数据
  16. 二叉树、B树、B+树、红黑树 的 本质区别以及各个应用场景
  17. PHP实现带有验证码的登陆注册
  18. html中的li标签不换行,css li 不换行(布局,内容)
  19. Java5分钟制作海报
  20. 奔腾n6005 怎么样 相当于什么水平

热门文章

  1. PSVR透露下一步计划,不做内容改做声控
  2. RIFF和WAVE音频文件格式
  3. 【BZOJ】1176: [Balkan2007]Mokia(cdq分治)
  4. Tomcat的设计模式
  5. 打开和禁用IPV6的方法
  6. GCC 原子操作中 Acquire/Release/Consume/Relaxed 内存模型
  7. Netlink 0003 -- Netlink动手实践
  8. 深入分析Linux自旋锁
  9. [RK3399][Android7.1] Display系统中的DRM模块介绍
  10. CFS完全公平调度类