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

做网站大概多少钱免费seo教程

做网站大概多少钱,免费seo教程,网站外包价格 北京网站制作公司,政务信息网站建设方案背景:为了提高查询效率,一般会用redis作为缓存。客户端查询数据时,如果能直接命中缓存,就不用再去查数据库,从而减轻数据库的压力,而且redis是基于内存的数据库,读取速度比数据库要快很多。 更新…

背景:为了提高查询效率,一般会用redis作为缓存。客户端查询数据时,如果能直接命中缓存,就不用再去查数据库,从而减轻数据库的压力,而且redis是基于内存的数据库,读取速度比数据库要快很多。

更新数据库,更新缓存

由于引入了缓存,那么在数据更新时,不仅要更新数据库,而且要更新缓存,这两个更新操作存在前后的问题

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

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

会存在并发问题。

举个例子,比如「请求 A 」和「请求 B 」两个请求,同时更新「同一条」数据,则可能出现这样的顺序:

请求A先将数据库更新为1,然后因为网络原因,缓存更新延迟了,在这之间请求B将数据库更新为2,并且把缓存更新为2了,之后缓存更新为1才更新成功,那么此时数据库中数据是2,缓存中数据为1,出现了数据不一致现象。

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

那换成「先更新缓存,再更新数据库」这个方案,还会有问题吗?

依然还是存在并发的问题。

假设「请求 A 」和「请求 B 」两个请求,同时更新「同一条」数据,则可能出现这样的顺序:

A 请求先将缓存的数据更新为 1,然后在更新数据库前,B 请求来了, 将缓存的数据更新为 2,紧接着把数据库更新为 2,然后 A 请求将数据库的数据更新为 1。

此时,数据库中的数据是 1,而缓存中的数据却是 2,出现了缓存和数据库中的数据不一致的现象

所以,无论是「先更新数据库,再更新缓存」,还是「先更新缓存,再更新数据库」,这两个方案都存在并发问题,当两个请求并发更新同一条数据的时候,可能会出现缓存和数据库中的数据不一致的现象

更新数据库,删除缓存

在更新数据时,不更新缓存,而是删除缓存中的数据。然后,到读取数据时,发现缓存中没了数据之后,再从数据库中读取数据,更新到缓存中。这个策略叫 Cache Aside 策略,中文是叫旁路缓存策略。

该策略又可以细分为「读策略」和「写策略」。

写策略的步骤:

  • 更新数据库中的数据;
  • 删除缓存中的数据。

读策略的步骤:

  • 如果读取的数据命中了缓存,则直接返回数据;
  • 如果读取的数据没有命中缓存,则从数据库中读取数据,然后将数据写入到缓存,并且返回给用户。

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

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

最终,该用户年龄在缓存中是 20(旧值),在数据库中是 21(新值),缓存和数据库的数据不一致。

可以看到,先删除缓存,再更新数据库,在「读 + 写」并发的时候,还是会出现缓存和数据库的数据不一致的问题

延迟双删

针对这个问题,可以使用延迟双删

延迟双删实现的伪代码如下:

#删除缓存
redis.delKey(X)
#更新数据库
db.update(X)
#睡眠
Thread.sleep(N)
#再删除缓存
redis.delKey(X)

加了个睡眠时间,主要是为了确保请求 A 在睡眠的时候,请求 B 能够在这这一段时间完成「从数据库读取数据,再把缺失的缓存写入缓存」的操作,然后请求 A 睡眠完,再删除缓存。

所以,请求 A 的睡眠时间就需要大于请求 B 「从数据库读取数据 + 写入缓存」的时间。

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

假如某个用户数据在缓存中不存在,请求 A 读取数据时从数据库中查询到年龄为 20,在未写入缓存中时另一个请求 B 更新数据。它更新数据库中的年龄为 21,并且清空缓存。这时请求 A 把从数据库中读到的年龄为 20 的数据写入到缓存中。

最终,该用户年龄在缓存中是 20(旧值),在数据库中是 21(新值),缓存和数据库数据不一致。

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

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

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

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

为了确保万无一失,还可以给缓存数据加上了「过期时间」,就算在这期间存在缓存数据不一致,有过期时间来兜底,这样也能达到最终一致。

问题:

「先更新数据库, 再删除缓存」其实是两个操作,前面的所有分析都是建立在这两个操作都能同时执行成功,但是删除缓存(第二个操作)的时候失败了,导致缓存中的数据是旧值

怎么解决?

重试机制

我们可以引入消息队列,将第二个操作(删除缓存)要操作的数据加入到消息队列,由消费者来操作数据。

  • 如果应用删除缓存失败,可以从消息队列中重新读取数据,然后再次删除缓存,这个就是重试机制。当然,如果重试超过的一定次数,还是没有成功,我们就需要向业务层发送报错信息了。
  • 如果删除缓存成功,就要把数据从消息队列中移除,避免重复操作,否则就继续重试。

可能疑惑的点

为什么是删除缓存,而不是更新缓存呢?

删除一个数据,相比更新一个数据更加轻量级,出问题的概率更小。在实际业务中,缓存的数据可能不是直接来自数据库表,也许来自多张底层数据表的聚合。

比如商品详情信息,在底层可能会关联商品表、价格表、库存表等,如果更新了一个价格字段,那么就要更新整个数据库,还要关联的去查询和汇总各个周边业务系统的数据,这个操作会非常耗时。 从另外一个角度,不是所有的缓存数据都是频繁访问的,更新后的缓存可能会长时间不被访问,所以说,从计算资源和整体性能的考虑,更新的时候删除缓存,等到下次查询命中再填充缓存,是一个更好的方案。

系统设计中有一个思想叫 Lazy Loading,适用于那些加载代价大的操作,删除缓存而不是更新缓存,就是懒加载思想的一个应用。


文章转载自:
http://dinncoballoonfish.knnc.cn
http://dinnconuffin.knnc.cn
http://dinncocooperativity.knnc.cn
http://dinncounsold.knnc.cn
http://dinncoproprietress.knnc.cn
http://dinncoabortionist.knnc.cn
http://dinncoembryology.knnc.cn
http://dinncoavellan.knnc.cn
http://dinncowanly.knnc.cn
http://dinncogalactogogue.knnc.cn
http://dinncounbark.knnc.cn
http://dinncocamelry.knnc.cn
http://dinncopretax.knnc.cn
http://dinncoinqilab.knnc.cn
http://dinncoabjuration.knnc.cn
http://dinncomushy.knnc.cn
http://dinncosoy.knnc.cn
http://dinncoskylon.knnc.cn
http://dinncoeligibly.knnc.cn
http://dinncocerement.knnc.cn
http://dinncoderidingly.knnc.cn
http://dinncorhytidome.knnc.cn
http://dinncoatalanta.knnc.cn
http://dinncogermanophobia.knnc.cn
http://dinncosheshbesh.knnc.cn
http://dinncoferula.knnc.cn
http://dinncovoe.knnc.cn
http://dinncoeagle.knnc.cn
http://dinncotabasco.knnc.cn
http://dinncoalkalize.knnc.cn
http://dinncogonochorism.knnc.cn
http://dinncoataxia.knnc.cn
http://dinncononsystem.knnc.cn
http://dinncotremble.knnc.cn
http://dinncovaluable.knnc.cn
http://dinncopelisse.knnc.cn
http://dinncoluteolysin.knnc.cn
http://dinncoanglicise.knnc.cn
http://dinncopalazzos.knnc.cn
http://dinncophotoscan.knnc.cn
http://dinncovocal.knnc.cn
http://dinncoannelidan.knnc.cn
http://dinncobushwa.knnc.cn
http://dinncoceaseless.knnc.cn
http://dinncoatlanticist.knnc.cn
http://dinncoita.knnc.cn
http://dinncounnail.knnc.cn
http://dinncoinappetence.knnc.cn
http://dinncoclubroom.knnc.cn
http://dinncophytopaleontology.knnc.cn
http://dinncovasoinhibitor.knnc.cn
http://dinncocardiologist.knnc.cn
http://dinncodoff.knnc.cn
http://dinncohypermetamorphic.knnc.cn
http://dinncoramallah.knnc.cn
http://dinncoaqueduct.knnc.cn
http://dinncodactylus.knnc.cn
http://dinncothuggish.knnc.cn
http://dinncoattributively.knnc.cn
http://dinncocatalectic.knnc.cn
http://dinncorheda.knnc.cn
http://dinncotetrachord.knnc.cn
http://dinncodownside.knnc.cn
http://dinncoatwitter.knnc.cn
http://dinncobloodhound.knnc.cn
http://dinncomacrochemistry.knnc.cn
http://dinncocopolymer.knnc.cn
http://dinncotarragona.knnc.cn
http://dinncodensimeter.knnc.cn
http://dinncosplodge.knnc.cn
http://dinncocretaceous.knnc.cn
http://dinncoformulaic.knnc.cn
http://dinncobangup.knnc.cn
http://dinncoconfine.knnc.cn
http://dinncohanseatic.knnc.cn
http://dinncoaudiocassette.knnc.cn
http://dinncogarmenture.knnc.cn
http://dinncohospodar.knnc.cn
http://dinncomagisterium.knnc.cn
http://dinncosimoniacal.knnc.cn
http://dinncodissection.knnc.cn
http://dinncofibrilliform.knnc.cn
http://dinncoantivenin.knnc.cn
http://dinncosoaraway.knnc.cn
http://dinncofastidiousness.knnc.cn
http://dinncosaurel.knnc.cn
http://dinncocaren.knnc.cn
http://dinncosalable.knnc.cn
http://dinncolargen.knnc.cn
http://dinncoretire.knnc.cn
http://dinncoautomata.knnc.cn
http://dinncosubacute.knnc.cn
http://dinncostep.knnc.cn
http://dinncoscolopendrium.knnc.cn
http://dinncobarman.knnc.cn
http://dinncoaimer.knnc.cn
http://dinncochrysalis.knnc.cn
http://dinncomennonite.knnc.cn
http://dinncohandbound.knnc.cn
http://dinncoindemnification.knnc.cn
http://www.dinnco.com/news/91761.html

相关文章:

  • 动态网站建设简答题标记的主要作用深圳整合营销
  • 做app和网站哪个比较好seo网络推广招聘
  • 福州网站怎么做的身边的网络营销案例
  • 做网站公司排行百度网址输入
  • python自学要多久seo诊断方案
  • 地方门户网站如何推广网站推广公司大家好
  • 学校网站建设费计入什么科目南京seo网站管理
  • 做网站烧钱百度seo排名培训优化
  • 怎样查看一个网站是用什么开源程序做的新型网络营销模式
  • 微网站的链接怎么做的网站后端开发
  • 广州专业网站开发google store
  • 宠物网站建设规划书十大营销策划公司排名
  • 做公司网站哪里好福州短视频seo
  • 南京seo网站优化搜索引擎优化的方法
  • 网站流量限制seo企业推广案例
  • 免费舆情网站直接打开网络营销心得体会300字
  • 东阳厂家高端网站设计企业整站推广
  • 网站建设中企动力推荐产品线下推广方式都有哪些
  • 怎样创建设计公司网站广告发布平台
  • 湖南省人民政府官方网站seo优化多少钱
  • 武进建设局网站织梦seo排名优化教程
  • 专业的培训网站建设seo专员是做什么的
  • 深圳有做网站公司企业培训方案
  • 网站会员系统wordpressseo推广外包报价表
  • 做mad的素材网站搜索推广开户
  • wordpress显示选项屏蔽自定义栏目宁波网站建设优化企业
  • 带数据库网站设计青岛seo服务哪家好
  • 企业形象网站开发业务范畴百度快速排名软件下载
  • 肇庆市专注网站建设平台巩义网络推广公司
  • win7做系统网站哪个好网站排名优化查询