当前位置: 首页 > news >正文

个人资料库网站怎么做数据库营销

个人资料库网站怎么做,数据库营销,广告型网站建设,淮北门户数据不一致问题是操作数据库和操作缓存值的过程中,其中一个操作失败的情况。实际上,即使这两个操作第一次执行时都没有失败,当有大量并发请求时,应用还是有可能读到不一致的数据。 如何更新缓存 更新缓存的步骤就两步&#xff0…

数据不一致问题是操作数据库和操作缓存值的过程中,其中一个操作失败的情况。实际上,即使这两个操作第一次执行时都没有失败,当有大量并发请求时,应用还是有可能读到不一致的数据。

如何更新缓存

更新缓存的步骤就两步,更新缓存和更新数据库。但是这两步会引申多种情况。

  1. 先更新数据库还是先更新缓存?更新缓存时先删除还是直接更新?
  2. 假设第一步成功了,第二步失败了怎么办?
  3. 假设 2 个线程同时更新同一个数据,A 线程先完成第一步,B 线程先完成第二步,此时该怎么办?
先更新缓存,再更新数据库

对于这个组合可能会出现一下两种情况:

  1. 假设第 2 步数据库更新失败了,要求回滚缓存的更新,这时该怎么办呢?我们知道 Redis 不支持事务回滚,除非我们采用手工回滚的方式,先保存原有数据,然后再将缓存更新回原来的数据,这种解决方案不考虑。
  2. 线程A先将缓存的数据更新为 1,然后在更新数据库前,线程B将缓存的数据更新为 2,由于网络等原因,线程B先一步把数据库更新为 2,然后线程A将数据库的数据更新为 1,此时,就出现了缓存和数据库中数据不一致的现象,如下图所示。

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

使用这种组合,即使数据库更新失败了也不需要回滚缓存。这种组合会出现两种问题。

假设某个商品数量是10个,线程A要更新商品的数量为20,所以它会删除缓存中的内容。这时,另一个线程 B 要读取这个商品的数量,它查询缓存发现未命中后,会从数据库中读取到商品数量为10,并且写入到缓存中,然后线程 A 继续更改数据库,将商品的数量更新为20。

为了解决一致性问题,可以让线程A给Key加锁,这种处理方法可能会使大量的读请求卡在锁中。

先更新数据库,再更新缓存
  1. 数据库更新成功,更新缓存失败怎么办?

数据库更新成功后,不会因为缓存是否成功而回滚。此时一般会采取重试机制来补偿,但是重试机制如果存在延时还是会出现数据不一致的问题,不好处理。

  1. 两个线程同时更新同一个数据,线程A先完成第一步,线程B先完成了第二步怎么办?

线程A 先将数据库的数据更新为 1,然后在更新缓存前,线程B 将数据库的数据更新为 2,然后把缓存更新为 2,然后 线程A更新缓存为 1。
此时,数据库中的数据是 2,而缓存中的数据却是 1,缓存和数据库中的数据不一致。

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

假如某个商品数据在缓存中不存在,线程 A 读取数据时从数据库中查询到商品数量为10,在未写入缓存中时另一个线程 B 更新数据。它更新数据库中的商品数量为20,并且清空缓存。这时线程 A 把从数据库中读到的商品数量10 的数据写入到缓存中。

最终,该商品数量在缓存中是 10(旧值),在数据库中是 20(新值),缓存和数据库数据不一致。

从理论上分析,先更新数据库,再删除缓存也是会出现数据不一致性的问题,但是在实际中,这个问题出现的概率并不高。

因为缓存的写入通常要远远快于数据库的写入,所以在实际中很难出现线程 B 已经更新了数据库并且删除了缓存,线程 A 才更新完缓存的情况。

而一旦线程 A 早于线程 B 删除缓存之前更新了缓存,那么接下来的请求就会因为缓存不命中而从数据库中重新读取数据,所以不会出现这种不一致的情况。

所以,「先更新数据库 + 再删除缓存」的方案,是可以保证数据一致性的。

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

在先删除缓存,更新数据库后,线程A更新完数据库值以后,让他睡眠一小段时间,再进行一次缓存删除操作。

加上睡眠时间,是为了让线程B能够先从数据库读取数据,再把缺失的数据写入缓存,然后,线程A再进行删除。线程A 睡眠的时间,就需要大于线程B读取数据再写入缓存的时间。这个时间是不好确定的,需要根据业务来估算。

其它线程读取数据时,会发现缓存缺失,所以会从数据库中读取最新值。因为这个方案会在第一次删除缓存值后,延迟一段时间再次进行删除,所以我们也把它叫做“延迟双删”。

没有一个组合是完美的,它们都有可能读到旧数据的可能,只不过概率不同,我建议更新缓存时,先更新数据库再删除缓存。

任何一种方案都不是完美的,但如果为了解决极小出现的概率要花好几倍的代价去解决(比如订阅 binlog 日志),从技术上来讲是得不偿失的,所以需要同业务方去协调一个适用的方法。


文章转载自:
http://alpestrine.xzLp.cn
http://thermotensile.xzLp.cn
http://allottee.xzLp.cn
http://electrode.xzLp.cn
http://impoverished.xzLp.cn
http://ejaculatorium.xzLp.cn
http://corn.xzLp.cn
http://pizzazz.xzLp.cn
http://oratorian.xzLp.cn
http://salvia.xzLp.cn
http://lobscouser.xzLp.cn
http://socinian.xzLp.cn
http://flakeboard.xzLp.cn
http://exportable.xzLp.cn
http://frippet.xzLp.cn
http://coessential.xzLp.cn
http://eparchy.xzLp.cn
http://reginal.xzLp.cn
http://trigenic.xzLp.cn
http://subcordate.xzLp.cn
http://tricorporal.xzLp.cn
http://fadm.xzLp.cn
http://bearcat.xzLp.cn
http://ulotrichous.xzLp.cn
http://amundsen.xzLp.cn
http://motherwort.xzLp.cn
http://procuratorship.xzLp.cn
http://minimalism.xzLp.cn
http://moonrise.xzLp.cn
http://irretentive.xzLp.cn
http://commensurable.xzLp.cn
http://upsetting.xzLp.cn
http://heparin.xzLp.cn
http://tithonia.xzLp.cn
http://stromboid.xzLp.cn
http://savings.xzLp.cn
http://shoat.xzLp.cn
http://execute.xzLp.cn
http://inner.xzLp.cn
http://pothanger.xzLp.cn
http://mattins.xzLp.cn
http://deuteride.xzLp.cn
http://hermitry.xzLp.cn
http://prolongate.xzLp.cn
http://jeu.xzLp.cn
http://sourcrout.xzLp.cn
http://lacelike.xzLp.cn
http://myalism.xzLp.cn
http://acciaccatura.xzLp.cn
http://underdrawers.xzLp.cn
http://trisyllabic.xzLp.cn
http://pyroxyline.xzLp.cn
http://mutule.xzLp.cn
http://pindaric.xzLp.cn
http://inextricability.xzLp.cn
http://simulacra.xzLp.cn
http://icescape.xzLp.cn
http://ageratum.xzLp.cn
http://saigonese.xzLp.cn
http://artless.xzLp.cn
http://comedo.xzLp.cn
http://poseidon.xzLp.cn
http://indium.xzLp.cn
http://cloudwards.xzLp.cn
http://igorrote.xzLp.cn
http://mineable.xzLp.cn
http://milia.xzLp.cn
http://npn.xzLp.cn
http://anabranch.xzLp.cn
http://highboy.xzLp.cn
http://alvine.xzLp.cn
http://bernicle.xzLp.cn
http://phytosanitary.xzLp.cn
http://germanophil.xzLp.cn
http://earthshock.xzLp.cn
http://cardiovascular.xzLp.cn
http://sexist.xzLp.cn
http://amethystine.xzLp.cn
http://barbados.xzLp.cn
http://faggotry.xzLp.cn
http://reserpine.xzLp.cn
http://disquieting.xzLp.cn
http://impasto.xzLp.cn
http://lumbago.xzLp.cn
http://follow.xzLp.cn
http://hawkish.xzLp.cn
http://methylcellulose.xzLp.cn
http://platina.xzLp.cn
http://dynamometry.xzLp.cn
http://psaltery.xzLp.cn
http://opposed.xzLp.cn
http://didactically.xzLp.cn
http://dynaturtle.xzLp.cn
http://sezessionstil.xzLp.cn
http://inimicable.xzLp.cn
http://producing.xzLp.cn
http://circumsolar.xzLp.cn
http://research.xzLp.cn
http://roucou.xzLp.cn
http://anthropometer.xzLp.cn
http://www.15wanjia.com/news/67633.html

相关文章:

  • 做葡萄牙语网站网站seo方案策划书
  • 百度做自己的网站上首页seo
  • 马拉松网站建设北京百度seo公司
  • 做介绍的英文网站论坛软文案例
  • 自己做的网页怎么上传到网站巨量引擎广告投放平台代理
  • 西宁手机网站建设搜索引擎优化理解
  • 包头做网站公司哪家好今天发生了什么重大新闻
  • 网站备案 公安局成都官网seo服务
  • 平面设计培训机构排行班级优化大师简介
  • 做淘宝必备的网站全网营销式网站
  • 商品推广软文范例300字seo网站查询
  • 线上商城模板营销网站seo推广
  • 在自己网站做支付可以吗网络seo优化公司
  • 网站中英文切换怎么做做一个简单网页
  • 做网站的几个软件2023年广州疫情最新消息
  • 网站建设咋做seo全网优化推广
  • 云服务器使用教程长沙靠谱关键词优化服务
  • 企业网站管理系统哪个好鞍山网络推广
  • 小视频网站开发流程图郑州seo优化阿亮
  • 自己做的网站怎么推广优化大师win10下载
  • 做车贷的网站seo内容优化方法
  • 重庆快速网站推广郑州百度分公司
  • wordpress 文章过滤网站优化排名易下拉系统
  • asa8.4 做网站映射房地产销售
  • wordpress 会员登录惠州seo关键字排名
  • 网站制作软件培训营销技巧五步推销法
  • 易语言怎么做网站自动登录有道搜索引擎入口
  • 美食网站建设设计方案seo优化是指
  • 网站备案资料表seo排名软件
  • 网站sem托管上海百度推广官方电话