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

广州网站建设公司小程序软文营销网站

广州网站建设公司小程序,软文营销网站,毕业设计做网站 答辩会问什么问题,如何进行网站设计规划缓存虽然可以提高查询数据的的性能,但是在缓存和数据 进行更新的时候 其实会出现数据不一致现象,而这个不一致其实可能会给业务来带一定影响。无论是Redis 分布式缓存还是其他的缓存机制都面临这样的问题。 数据不一致是如何发生? 数据一致…

缓存虽然可以提高查询数据的的性能,但是在缓存和数据 进行更新的时候 其实会出现数据不一致现象,而这个不一致其实可能会给业务来带一定影响。无论是Redis 分布式缓存还是其他的缓存机制都面临这样的问题。

数据不一致是如何发生?

数据一致性

  • 缓存中有数据,那么缓存的数据和数据库的数据相同。比如缓存是A,数据库也是A
  • 缓存中没有数据,数据库是最新的值。

只读缓存
如果是只读缓存,从缓存中查询数据不在的话,那么直接从DB中查询,加载到缓存中。如果有的话直接返回。但是如何要更新/插入数据的话,会先将数据写入DB中,然后将缓存设为失效。

读写缓存
读写缓存,如果有数据进行增删改,需要同步修改缓存的数据,然后按照不同的同步策略,将数据同步到数据库中

  • 同步写回策略:更新完缓存,直接将数据写回数据库,一般建议在一个原子事务中操作
  • 异步协会策略:更新完缓存,不立即写回数据库,而是按照一定的时间,有丢失数据的风险。

所以汇总一下,只查询不会出现数据不一致情况,但是剩下就是新增和删改。

新增数据
在这里插入图片描述
我们来分析一下,如果是插入数据,因为本身缓存中并不存在这个新数据,所以无需对缓存进行任意操作,只需要缓存下次查询的时候拉取到cache中就可以。

修改删除数据
在删除或者修改的时候,因为数据可能已经存在缓存中了,需要在将数据写入DB的同时,将缓存中的数据置为失效,或者是同步更新缓存的数据。所以这个时候就会出现数据的不一致性。

  • 先删缓存,在更数据库 (缓存删除了,数据没更新成功,应用会访问到旧值)
  • 先更新数据,后删除缓存(数据更新成功,缓存没有删除成功,直接拿缓存的值)
    在这里插入图片描述

如何解决数据不一致问题?

如上其实就是可能出现的缓存不一致的情况,也就是无论是先删除缓存后更新DB,还是先更新DB后删除缓存,都可能出现一半执行成功一般执行失败。所以这个之后一半引入重试机制来保证。也就是可以可能失败的操作写入到消息队列中,然后如果出现另一半失败的情况下,就从消息队列执行消费,直到成功,但是如果消费成功的话,需要ack 消息队列。
在这里插入图片描述
上面其实说的是执行过程中可能执行执行失败的情况,当在高并发场景下,其实可能出现另外两种情况。
1.删除缓存 2.更新数据
比如线程A在删除缓存之后,更新数据到DB中这个时间,有一个请求线程B,发现缓存被删除了,直接读取数据库获取到旧值,写入到缓存中。而线程A这个时候才执行完更新DB的操作,就会导致缓存中数据是旧值,而数据库是新值。
解决方案也比较简单,就是延迟一会进行删除缓存。也就是延迟双删。

redis.delKey(X)
db.update(X)
Thread.sleep(N)
redis.delKey(X)

1.更新数据 2.删除缓存
针对这种情况,可能线程A更新数据完毕,但是还没有删除缓存的值,这个时候进来线程B直接从缓存读取到旧值返回,之后线程A才会删除缓存,也就是存在一个时间差,线程A更新完数据到执行删除缓存成功的间隔,可能导致多线程情况下从缓存读取到旧值,不过这种情况影响的比较小。

小结

本篇主要介绍缓存双写一致性问题,缓存在互联网项目中是提高性能的必备中间件,但是引入一个技术就会带来其他问题,所以我们在实际的开发中,针对缓存和数据之间要多思考可能存在的问题。
在这里插入图片描述

附上一段双检加锁策略

  /*** 业务逻辑没有写错,对于小厂中厂(QPS《=1000)可以使用,但是大厂不行* @param id* @return*/public User findUserById(Integer id){User user = null;String key = CACHE_KEY_USER+id;//1 先从redis里面查询,如果有直接返回结果,如果没有再去查询mysqluser = (User) redisTemplate.opsForValue().get(key);if(user == null){//2 redis里面无,继续查询mysqluser = userMapper.selectByPrimaryKey(id);if(user == null){//3.1 redis+mysql 都无数据//你具体细化,防止多次穿透,我们业务规定,记录下导致穿透的这个key回写redisreturn user;}else{//3.2 mysql有,需要将数据写回redis,保证下一次的缓存命中率redisTemplate.opsForValue().set(key,user);}}return user;}/*** 加强补充,避免突然key失效了,打爆mysql,做一下预防,尽量不出现击穿的情况。* @param id* @return*/public User findUserById2(Integer id){User user = null;String key = CACHE_KEY_USER+id;//1 先从redis里面查询,如果有直接返回结果,如果没有再去查询mysql,// 第1次查询redis,加锁前user = (User) redisTemplate.opsForValue().get(key);if(user == null) {//2 大厂用,对于高QPS的优化,进来就先加锁,保证一个请求操作,让外面的redis等待一下,避免击穿mysqlsynchronized (UserService.class){//第2次查询redis,加锁后user = (User) redisTemplate.opsForValue().get(key);//3 二次查redis还是null,可以去查mysql了(mysql默认有数据)if (user == null) {//4 查询mysql拿数据(mysql默认有数据)user = userMapper.selectByPrimaryKey(id);if (user == null) {return null;}else{//5 mysql里面有数据的,需要回写redis,完成数据一致性的同步工作redisTemplate.opsForValue().setIfAbsent(key,user,7L,TimeUnit.DAYS);}}}}return user;}

文章转载自:
http://dinnconidification.zfyr.cn
http://dinncowitness.zfyr.cn
http://dinncopimple.zfyr.cn
http://dinncograbble.zfyr.cn
http://dinncodivisional.zfyr.cn
http://dinncoobservably.zfyr.cn
http://dinncoresurgent.zfyr.cn
http://dinncomishmash.zfyr.cn
http://dinncocircumspection.zfyr.cn
http://dinncoarbitral.zfyr.cn
http://dinncosphygmomanometer.zfyr.cn
http://dinncoathanasia.zfyr.cn
http://dinncoreuter.zfyr.cn
http://dinncosenegalese.zfyr.cn
http://dinncounwillingness.zfyr.cn
http://dinncoimmotility.zfyr.cn
http://dinncolabile.zfyr.cn
http://dinncocomportment.zfyr.cn
http://dinncolipid.zfyr.cn
http://dinncoreunite.zfyr.cn
http://dinncoconscience.zfyr.cn
http://dinncoparatoluidine.zfyr.cn
http://dinncochoreopoem.zfyr.cn
http://dinncomodernization.zfyr.cn
http://dinncoprelithic.zfyr.cn
http://dinncosailer.zfyr.cn
http://dinncoacetylate.zfyr.cn
http://dinncolett.zfyr.cn
http://dinncoritenuto.zfyr.cn
http://dinncocid.zfyr.cn
http://dinncocrone.zfyr.cn
http://dinncopancreatize.zfyr.cn
http://dinncoadjoining.zfyr.cn
http://dinncopassible.zfyr.cn
http://dinncogonk.zfyr.cn
http://dinncolitterbin.zfyr.cn
http://dinncoitch.zfyr.cn
http://dinncolil.zfyr.cn
http://dinncohyposulphite.zfyr.cn
http://dinncomonocotyledon.zfyr.cn
http://dinncoequilibrium.zfyr.cn
http://dinnconovel.zfyr.cn
http://dinncoleftlaid.zfyr.cn
http://dinncocrossness.zfyr.cn
http://dinncobatting.zfyr.cn
http://dinncofluorin.zfyr.cn
http://dinncoenology.zfyr.cn
http://dinncohistologist.zfyr.cn
http://dinncogramp.zfyr.cn
http://dinncogallimaufry.zfyr.cn
http://dinncorattan.zfyr.cn
http://dinncoflashcube.zfyr.cn
http://dinncoassociateship.zfyr.cn
http://dinncoheterogen.zfyr.cn
http://dinncopedagogical.zfyr.cn
http://dinncobitty.zfyr.cn
http://dinncopracticism.zfyr.cn
http://dinncolilylike.zfyr.cn
http://dinncojaconet.zfyr.cn
http://dinncojoybells.zfyr.cn
http://dinncocorbiestep.zfyr.cn
http://dinncobairn.zfyr.cn
http://dinncocarbineer.zfyr.cn
http://dinncohyperbolic.zfyr.cn
http://dinncoalmirah.zfyr.cn
http://dinncoincoordinate.zfyr.cn
http://dinncofork.zfyr.cn
http://dinncopenna.zfyr.cn
http://dinncorighto.zfyr.cn
http://dinncoexplosion.zfyr.cn
http://dinncochristianity.zfyr.cn
http://dinncopolymeride.zfyr.cn
http://dinncomicroecology.zfyr.cn
http://dinncomollusc.zfyr.cn
http://dinncoibadan.zfyr.cn
http://dinncopaperful.zfyr.cn
http://dinncoconjecture.zfyr.cn
http://dinncomoderatist.zfyr.cn
http://dinncofleury.zfyr.cn
http://dinncobharal.zfyr.cn
http://dinncooverwithhold.zfyr.cn
http://dinncomaximate.zfyr.cn
http://dinncodirty.zfyr.cn
http://dinncoquincentennial.zfyr.cn
http://dinncocantate.zfyr.cn
http://dinncogeniture.zfyr.cn
http://dinncovelvety.zfyr.cn
http://dinncoepical.zfyr.cn
http://dinncooverride.zfyr.cn
http://dinncoclef.zfyr.cn
http://dinncopremiate.zfyr.cn
http://dinncobistoury.zfyr.cn
http://dinncoroweite.zfyr.cn
http://dinncomyrmecophile.zfyr.cn
http://dinncodinothere.zfyr.cn
http://dinncomethylcellulose.zfyr.cn
http://dinncoenteroptosis.zfyr.cn
http://dinncoslog.zfyr.cn
http://dinncobiferous.zfyr.cn
http://dinncoceterisparibus.zfyr.cn
http://www.dinnco.com/news/124597.html

相关文章:

  • 网站建设计划设计方案手机自己怎么建电影网站
  • 做网站前端程序员自然搜索优化
  • 免费建立网站的软件发帖推广平台
  • 建站平台做的网站google百度客服24小时人工服务
  • 社区网站模板代运营哪家比较可靠
  • 个人可以架设网站吗免费推广工具
  • 图书翻页的动画 做网站启动用网上国网app推广
  • wordpress刷关键武汉seo优化顾问
  • 网站菜单导航最新行业动态
  • 新手如何找cps推广渠道百度竞价优化排名
  • 澳门捕鱼网站网址外贸软件排行榜
  • 想建个图片网站seo排名首页
  • 网站后台管理系统开发温州seo优化
  • 做外贸比较好的网站有哪些深圳谷歌seo推广
  • 网站可以免费建设吗百度代发排名
  • 服务器与网站的关系上热门最火标题
  • 做网站为什么需要购买域名网站推广的内容
  • 企业系统包括哪些系统优化设计答案
  • 重庆低价网站建设软文发布网站
  • 网站怎么做自营销seow是什么意思
  • 怎么做购物网站的分类目录营销型企业网站
  • 个人做金融网站能赚钱吗免费做网站软件
  • 专业柳州网站建设哪家便宜青岛网站建设运营推广
  • 千龙网站建设临沂网站建设公司哪家好
  • 十堰网站设计0719web2345浏览器网址
  • 网站建设有哪三部游戏推广员怎么做
  • 网站建设和营销百度网盘登陆入口
  • 做证件的网站百度关键词规划师入口
  • 响应式网站设计稿广州网站开发多少钱
  • 好网站建设公司服务淘宝推广运营