学习
实践
活动
专区
工具
TVP
写文章

到底是先更新数据库还是先更新缓存?

但是在后续更新数据的操作中,是更新数据库,接下来更新缓存还是删除缓存?又或者是先删除缓存,再更新数据库? 缓存更新策略 从理论上来说,给缓存设置过期时间,其实是一种最终一致性的表现。 (1) 线程A更新数据库 (2) 线程B更新数据库 (3) 线程B更新了缓存 (4) 线程A更新了缓存 此时就会出现数据库中的数据与缓存的数据不一致的情况,这是因为线程A先更新数据库,可能因为网络等异常情况 ,线程B更新数据库进而更新了缓存,当线程B更新完缓存后,线程A才更新缓存,这就导致了数据库数据与缓存数据的不一致。 首先一个业务场景就是数据库写多读少的场景,这种场景下采用先更新数据库更新缓存的策略,就会导致缓存并未被读取就会被频繁的更新,极大的浪费了服务器的性能。 先删除缓存再更新数据库 先删除缓存再更新数据库的方案也存在着线程安全的问题,例如,线程A更新缓存,同时,线程B读取缓存的数据。可能会出现下面的执行顺序。

41410
  • 广告
    关闭

    热门业务场景教学

    个人网站、项目部署、开发环境、游戏服务器、图床、渲染训练等免费搭建教程,多款云服务器20元起。

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    ​到底是先更新数据库还是先更新缓存?

    但是在后续更新数据的操作中,是更新数据库,接下来更新缓存还是删除缓存?又或者是先删除缓存,再更新数据库? 缓存更新策略 从理论上来说,给缓存设置过期时间,其实是一中最终一致性的表现。 (1) 线程A更新数据库 (2) 线程B更新数据库 (3) 线程B更新了缓存 (4) 线程A更新了缓存 此时就会出现数据库中的数据与缓存的数据不一致的情况,这是因为线程A先更新数据库,可能因为网络等异常情况 ,线程B更新数据库进而更新了缓存,当线程B更新完缓存后,线程A才更新缓存,这就导致了数据库数据与缓存数据的不一致。 首先一个业务场景就是数据库写多读少的场景,这种场景下采用先更新数据库更新缓存的策略,就会导致缓存并未被读取就会被频繁的更新,极大的浪费了服务器的性能。 先删除缓存再更新数据库 先删除缓存再更新数据库的方案也存在着线程安全的问题,例如,线程A更新缓存,同时,线程B读取缓存的数据。可能会出现下面的执行顺序。

    82020

    Django更新models数据库结构步骤

    有时候在我们使用Django设计了models中的数据库结构,并且已经同步了数据库之后,我们突然想在数据表中更新或者增加新的字段,也就是需要修改数据库的结构,会出现以下的问题: C:\Users\Administrator ,会导致数据库结构更新失败 解决方法如下: 第一种方式:先删除再重构 1、删除数据库对应的数据表 注意:在这里可以不用暴力删除数据表,可以利用django的migrations进行,操作如下: 1.1、 上图的意思是说addr没有默认值,无法更新数据库中,然后给出了两个选项: 第一是让你马上给定一个默认值,然后一次性的把所有addr都写成这个值 第二是先退出,你自己在models里面去配置默认值 我选择先退出 ,在models中加上默认值,在进行makemigrations,这次就会更新成功了! 让我们来检查数据库中的数据表: ? 可以看到数据结构发生了变化! 以上这篇Django更新models数据库结构步骤就是小编分享给大家的全部内容了,希望能给大家一个参考。

    1.1K20

    纯真IP数据库更新代码-PHP

    相传纯真数据库 qqwry.dat 已经有很久远的历史了,相信也依旧有非常多网站使用该库来查询 IP,其中在两年前也开始正式的用到了,同样更庆幸的是 qqwry.dat 纯真数据库依旧保持着更新,并且免费 然而纯真网络官网提供的数据库需要本地安装软件才能获得最新的 IP 地址库,然后在通过软件安装目录找到 qqwry.dat 文件再去使用,手动更新就显得不太方便了,所以刚刚才更新用户中心的 IP 地址库, 不过还好,发现了一个 PHP 自动更新纯真数据库 qqwry.dat 文件的方法,通过以下代码的实现,你应该可以实现纯真数据库自动更新更能: <? php // PHP 纯真 IP 地址数据库自动更新功能 $copywrite = file_get_contents("http://update.cz88.net/ip/copywrite.rar"

    17530

    高并发场景下,到底先更新缓存还是先更新数据库

    踩坑一:先更新数据库,再更新缓存 如果同时有两个写请求需要更新数据,每个写请求都先更新数据库更新缓存,在并发场景可能会出现数据不一致的情况。 ? 先更新数据库,再更新缓存 如上图的执行过程: (1)写请求1更新数据库,将 age 字段更新为18; (2)写请求2更新数据库,将 age 字段更新为20; (3)写请求2更新缓存,缓存 age 设置为 踩坑二:先删缓存,再更新数据库 如果写请求的处理流程是先删缓存再更新数据库,在一个读请求和一个写请求并发场景下可能会出现数据不一致情况。 ? 踩坑三:先更新数据库,再删除缓存 在实际的系统中针对写请求还是推荐先更新数据库再删除缓存,但是在理论上还是存在问题,以下面这个例子说明。 ? 先更新数据库,再删除缓存 如上图的执行过程: (1)读请求先查询缓存,缓存未击中,查询数据库返回数据; (2)写请求更新数据库,删除缓存; (3)读请求回写缓存; 整个流程操作下来发现数据库age为20

    2K20

    高并发场景下,到底先更新缓存还是先更新数据库

    踩坑一:先更新数据库,再更新缓存 如果同时有两个写请求需要更新数据,每个写请求都先更新数据库更新缓存,在并发场景可能会出现数据不一致的情况。 先更新数据库,再更新缓存 如上图的执行过程: (1)写请求1更新数据库,将 age 字段更新为18; (2)写请求2更新数据库,将 age 字段更新为20; (3)写请求2更新缓存,缓存 age 设置为 踩坑二:先删缓存,再更新数据库 如果写请求的处理流程是先删缓存再更新数据库,在一个读请求和一个写请求并发场景下可能会出现数据不一致情况。 踩坑三:先更新数据库,再删除缓存 在实际的系统中针对写请求还是推荐先更新数据库再删除缓存,但是在理论上还是存在问题,以下面这个例子说明。 先更新数据库,再删除缓存 如上图的执行过程: (1)读请求先查询缓存,缓存未击中,查询数据库返回数据; (2)写请求更新数据库,删除缓存; (3)读请求回写缓存; 整个流程操作下来发现数据库age为20

    18150

    高并发场景下,到底先更新缓存还是先更新数据库

    踩坑一:先更新数据库,再更新缓存 如果同时有两个写请求需要更新数据,每个写请求都先更新数据库更新缓存,在并发场景可能会出现数据不一致的情况。 ? 先更新数据库,再更新缓存 如上图的执行过程: (1)写请求1更新数据库,将 age 字段更新为18; (2)写请求2更新数据库,将 age 字段更新为20; (3)写请求2更新缓存,缓存 age 设置为 踩坑二:先删缓存,再更新数据库 如果写请求的处理流程是先删缓存再更新数据库,在一个读请求和一个写请求并发场景下可能会出现数据不一致情况。 ? 踩坑三:先更新数据库,再删除缓存 在实际的系统中针对写请求还是推荐先更新数据库再删除缓存,但是在理论上还是存在问题,以下面这个例子说明。 ? 先更新数据库,再删除缓存 如上图的执行过程: (1)读请求先查询缓存,缓存未击中,查询数据库返回数据; (2)写请求更新数据库,删除缓存; (3)读请求回写缓存; 整个流程操作下来发现数据库age为20

    33110

    数据库数据如何更新?云数据库是否安全?

    虽然很多企业管理者对云数据库的相关操作已经非常熟悉了,但是在具体操作云数据库的过程中,却还是会遇到各种无法解决的问题,比如很多人就不知道云数据库数据如何更新。 下面为大家简单介绍云数据库数据如何更新,以及云数据库是否安全。 云数据库数据如何更新 想要更新数据库数据,首先需要建立新的一个函数,这个函数可以根据相关需要进行命名,最好是简单易懂的名字,否则后期可能难以找到。 其次,在建立的新云函数里编写相应的编码。 云数据库是否安全 相对于传统数据库来说,云数据库的安全性得到了大大提升,但是并没有绝对安全这一概念,因为数据库也不例外,企业管理者应当。 以上分别为大家介绍了云数据库数据如何更新,以及云数据库是否安全与数据库中存储了海量的企业信息,所以云数据库更新以及安全性问题一直是大家所关心的,只需要下载云函数并填写相应的编码,即可进行数据的更新

    30130

    使用特殊的技术更新数据库(ABAP)

    正文部分 使用特殊的技术更新数据库(ABAP) 一,过程 1,DIALOG程序获得用户要更新的数据,并把它写到一个特殊的LOG TABLE,表内的条目属于同一个请求类型,包含了稍后将要写到数据库的数据 3,系统基本程序从LOG TABLE读取这个LUW的需要更新的数据,并把这些数据提供给系统更新程序。 4,系统更新程序接受传输给它的数据,并更新数据库。 UPDATE MODULE里包含实际的数据库更新语句。 在DIALOG程序中,通过一个特别的FM,使用IN UPDATE TASK。 举个例子,如果一个凭证没有成功更新数据库是因为数据库的表空间溢出,这个时候比较适合再次处理。 三,更新的模式 1,异步模式 在这个模式下,DIALOG程序和UPDATE程序各自运行。 当数据库更新花费比较长的时间,用户DIALOG需要较少的响应时间,异步更新显得比较重要。在DIALOG处理中,异步更新是标准的技术,意思就是DIALOG程序一般会采取异步更新方式。

    36911

    时隔四年,NOG数据库更新啦!

    就在前天,我发现EggNOG数据库已经进行了更新,也即EggNOG 5.0,特此分享给大家。 还在进行数据分析的小盆友们可以下载新的数据库进行注释啦! EggNOG数据库是直源同系蛋白分组比对(evolutionary genealogy of genes: Non-supervised Orthologous Groups)数据库,由EMBL创建并维护 的主页地址: http://eggnogdb.embl.de/#/app/home 新版本EggNOG 5.0的主页地址: http://eggnog5.embl.de/#/app/home 大家可以看到更新后的版本数据量大大增加 ,不过新版本EggNOG 5.0的数据库目前还没有整理完善,主页上不同taxonomy level的数据文件下载链接没有配置好,eggnog-mapper的配套数据库并没有更新(虽然并不推荐使用这个软件

    38330

    问题定位-研发说应用语句更新操作成功数据库里数据没有更新

    研发在技术群里@我说数据库有问题,我就仔细询问了相关的情况,他们说应用的操作更新数据库成功了(事务也提交成功)而数据库中的数据确没有更新,他们就断定数据库出了问题,并拿出了应用日志为证据 java1 xh_plan_name W+DIRBCHID0166815d522f4f3695e692221662dd42 task_get_type 0 agent_id 10134 以此为由例证数据库更新操作成功了 (他们以id为1631527为例查询说数据没有更新) 看他们这么坚定,我也只能找到证据,说明数据库更新了,并成功了 联系现场操作人员帮忙查询一下数据库里的1631527数据 java2.jpg 就猜测如果数据库更新成功了 */; 表明更新提交了 到这里可以肯定数据肯定更新成功了,那就剩下最后一种可能,就是数据又被更新回去了,了解到记录是通过接口传进来的,如果接口传了同样记录会怎样处理?? 或者记录有没有可能再次被引用程序更新回去??

    35260

    MySql数据库Update批量更新与批量更新多条记录的不同值实现方法

    批量更新 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value '); 这里注意 ‘other_values' 是一个逗号(,)分隔的字符串,如:1,2,3 那如果更新多条数据为不同的值,可能很多人会这样写: foreach ($display_order as $ UPDATE categories SET display_order = $ordinal WHERE id = $id"; mysql_query($sql); } 即是循环一条一条的更新记录 那么能不能一条sql语句实现批量更新呢?mysql并没有提供直接的方法来实现批量更新,但是可以用点小技巧来实现。 确保sql语句仅执行需要修改的行数,这里只有3条数据进行更新,而where子句确保只有3行数据执行。

    9.5K31

    关注

    腾讯云开发者公众号
    10元无门槛代金券
    洞察腾讯核心技术
    剖析业界实践案例
    腾讯云开发者公众号二维码

    相关产品

    • 云数据库 MySQL

      云数据库 MySQL

      腾讯云数据库MySQL是一种高性能、高可靠、高安全、可灵活伸缩的数据库托管服务,其不仅经济实惠,而且提供备份回档、监控、快速扩容、数据传输等数据库运维全套解决方案,为您简化 IT 运维工作,让您能更加专注于业务发展。

    相关资讯

    热门标签

    活动推荐

    扫码关注腾讯云开发者

    领取腾讯云代金券