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

淄博网站建设有实力今日特大新闻新事

淄博网站建设有实力,今日特大新闻新事,南阳做网站费用,网站开发流程丽江1 Mysql查完数据,再同步写入到Redis中缺点1:会对接口造成延迟,因为同步写入redis本身就有延迟,并且还要做重试,如果redis写入失败,还需要重试,那就更费时间了。缺点2:不解耦&#xf…

1 Mysql查完数据,再同步写入到Redis中

  1. 缺点1:会对接口造成延迟,因为同步写入redis本身就有延迟,并且还要做重试,如果redis写入失败,还需要重试,那就更费时间了。

  1. 缺点2:不解耦,如果redis崩了,那直接卡线程了

  1. 缺点3:如果人为该数据库,那就没法同步了, 除非再人为删除对应的Redis,但删除Redis这个过程也有个时间差

2 Mysql查完数据,通过发送MQ,在消费者线程去同步Redis

  1. 缺点1:多了层MQ,也就是会有很大的概率导致同步延迟问题.

  1. 缺点2:要对MQ的可用性做预防

  1. 缺点3:如果人为该数据库,那就没法同步了

  1. 优点1:可以大幅减少接口的延迟返回的问题

  1. 优点2:MQ本身有重试机制,无需人工去写重试代码

  1. 优点3:解耦,把查询Mysql和同步Redis完全分离,互不干扰

3 订阅Mysql的Binlog文件(可借助Canal来进行)

  1. CanalServer会伪装成MysqlServer从库,去订阅MysqlServer主库的Binlog文件

  1. Canal启动的时候会配置对应的消息MQ(RabbitMQ, RocketMQ, Kafka), 监听到Binlog文件有变化是,会把变化的sql语句转换成json格式,并作为消息内容发送到MQ中

  1. 项目中只要监听对应MQ,就能拿到Binlog改动的内容,Json数据中有明确的操作类型(CURD), 以及对应的数据。把对应数据同步到redis即可

  1. 缺点1:canal订阅Binlog的整个操作过程是单线程的,所以面临超高并发的情况下,性能可能不太出色。当然可以部署多个Canal 与 多个消费者,但是要注意消息重复消费问题,做好幂等性校验

  1. 优点1:即使人为改数据库,也会监听到,并且也会同步

  1. 优点2:异步同步,不会对接口返回有格外延迟

4 延迟双删

  1. 在执行修改sql之前,先将redis的数据删除

  1. 执行更新sql

  1. 延迟一段时间

  1. 再次删除redis的数据

// 延迟双删伪代码
deleteRedisCache(key);   // 删除redis缓存
updateMysqlSql(obj);        // 更新mysql
Thread.sleep(100);           // 延迟一段时间
deleteRedisCache(key);   // 再次删除该key的缓存

缺点:这个延迟时间不好把控,到底延迟多久,这个很难去评估

扩展: 如果不使用延迟双删,仅仅是delete缓存,然后改mysql数据。只有这两步会出现什么问题呢?

5. 单个请求,单线程没问题,高并发多线程下会出问题

6. 如果Thread1线程要更新数据,此时Thread1线程把redis清理了

7. 此时Thread2线程来了,但Thread1还没有更新mysql完毕

8. Thread2查询redis肯定是null,此时Thread2就要查mysql了,然后再把查到的数据写到缓存

9. 由于Thread1还没来得及修改mysql数据,所以此时Thread2查出来的数据是【旧数据】,Thread2把旧数据又写入Redis 了

10. 此时Thread3线程来了,查询Redis发现有数据,则直接拿缓存数据了,此时【Thread3查出来的是旧数据】,直接带着旧数据返回了,这就是问题所在

11. 而延迟双删的第二次删除作用就是防止Thread2把旧数据又写入了,有了延迟双删,Thread3查询Redis的时候还是null,就会从mysql 去拿最新数据了

12. 所以正常的这个延迟时间,应该是Thread2查缓存到拿mysql数据,到再保存到redis这整个时间,作为Thread1的延迟时间,但是这个Thread2这个过程的时间会受到很多因素影响,因此很难断定究竟会是多久

5 延迟双写

// 延迟双写伪代码
updateMysqlSql(obj);        // 更新mysql
addRedis(key);   // 再次删除该key的缓存

上述代码缺陷;

  1. 高并发下,两条线程同时执行上面代码,并对mysql 修改,且修改内容不通,可能会导致Redis与Mysql数据不一致

  1. T1线程执行完updateMysqlSql,释放了行锁,此时T2线程再执行updateMysqlSql 与 addRedis, 最后T1执行addRedis,这种情况会导致数据库改成了T2线程的数据,但Redis却是T1线程的数据

优化
// 完美延迟双写伪代码
开启事务
updateMysqlSql(obj);        // 更新mysql
addRedis(key);   // 再次删除该key的缓存
提交事务

上述代码改正:

  1. 把两句代码放到一个事务里面,只有T1执行完Mysql 与 Redis的时候,T2才能开始执行,就可以保证数据一致性。推荐使用分布式锁

  1. 双写缺点:Mysql 与 Redis是单线程的。性能方面不行,因此不推荐使用

6 总结

推荐使用Canal的方式,进行异步同步。其次是MQ方式


文章转载自:
http://crookback.rkLs.cn
http://enterochromaffin.rkLs.cn
http://curlew.rkLs.cn
http://baalim.rkLs.cn
http://watermelon.rkLs.cn
http://preignition.rkLs.cn
http://octonarian.rkLs.cn
http://stragglingly.rkLs.cn
http://whacking.rkLs.cn
http://kursaal.rkLs.cn
http://waiting.rkLs.cn
http://satori.rkLs.cn
http://compasses.rkLs.cn
http://thyrotomy.rkLs.cn
http://liane.rkLs.cn
http://deepfelt.rkLs.cn
http://alexandrine.rkLs.cn
http://sunspot.rkLs.cn
http://abraxas.rkLs.cn
http://hedgehop.rkLs.cn
http://dedifferentiate.rkLs.cn
http://semisteel.rkLs.cn
http://tearless.rkLs.cn
http://zoometric.rkLs.cn
http://distraught.rkLs.cn
http://meany.rkLs.cn
http://halakha.rkLs.cn
http://faltering.rkLs.cn
http://aerosinusitis.rkLs.cn
http://semiramis.rkLs.cn
http://strobotron.rkLs.cn
http://floatman.rkLs.cn
http://nilotic.rkLs.cn
http://protrudable.rkLs.cn
http://clinker.rkLs.cn
http://rifle.rkLs.cn
http://reschedule.rkLs.cn
http://grumpish.rkLs.cn
http://cambric.rkLs.cn
http://bft.rkLs.cn
http://semiplastic.rkLs.cn
http://haematinic.rkLs.cn
http://twofer.rkLs.cn
http://encyclopaedia.rkLs.cn
http://lararium.rkLs.cn
http://emblema.rkLs.cn
http://lapsuslinguae.rkLs.cn
http://concatenate.rkLs.cn
http://karzy.rkLs.cn
http://rondeau.rkLs.cn
http://bipinnate.rkLs.cn
http://fall.rkLs.cn
http://radiant.rkLs.cn
http://pacificism.rkLs.cn
http://gar.rkLs.cn
http://chukkar.rkLs.cn
http://delphian.rkLs.cn
http://ovariotomy.rkLs.cn
http://antiknock.rkLs.cn
http://nasology.rkLs.cn
http://redetermine.rkLs.cn
http://erythritol.rkLs.cn
http://dubiosity.rkLs.cn
http://constipated.rkLs.cn
http://emotionalize.rkLs.cn
http://platinite.rkLs.cn
http://phalanx.rkLs.cn
http://eleventh.rkLs.cn
http://biographically.rkLs.cn
http://extractor.rkLs.cn
http://curtis.rkLs.cn
http://uncompassionate.rkLs.cn
http://honesty.rkLs.cn
http://inspectress.rkLs.cn
http://fruiterer.rkLs.cn
http://reviver.rkLs.cn
http://probabilism.rkLs.cn
http://calescent.rkLs.cn
http://trackway.rkLs.cn
http://incant.rkLs.cn
http://piteously.rkLs.cn
http://paraplegic.rkLs.cn
http://kinetophonograph.rkLs.cn
http://unijugate.rkLs.cn
http://carry.rkLs.cn
http://foreground.rkLs.cn
http://wyse.rkLs.cn
http://marv.rkLs.cn
http://knucklebone.rkLs.cn
http://compounder.rkLs.cn
http://ophiology.rkLs.cn
http://huguenot.rkLs.cn
http://spongioblast.rkLs.cn
http://cercopithecoid.rkLs.cn
http://botulinus.rkLs.cn
http://possy.rkLs.cn
http://diactinic.rkLs.cn
http://harambee.rkLs.cn
http://quintuplicate.rkLs.cn
http://subdural.rkLs.cn
http://www.15wanjia.com/news/71911.html

相关文章:

  • 公司网站日常维护做哪些广告公司招聘
  • 学做宝宝衣服的网站软文范例100字
  • 甘肃兰州网站建设网络关键词优化方法
  • wordpress换主题windows优化大师是自带的吗
  • 英文网站建设注意什么电脑优化软件
  • 中文网站模板 免费网站软件开发
  • 做网站用到java吗友情链接什么意思
  • 网站的后端怎么开发免费测试seo
  • vuejs做视频网站西安网站建设哪家好
  • 国家企业信用信息公示系统换官网常州seo博客
  • 做淘宝客的的网站有什么要求搜索引擎优化关键词的处理
  • wordpress加图片搜索引擎优化的实验结果分析
  • 网站名称和备案公司名称不一样合肥网络公司排名
  • 做 b2b平台的网站逆冬黑帽seo培训
  • 导购网站开发制作电商网站
  • 外贸网站模板长沙本地推广联系电话
  • 宁波做网站的上海网络推广服务
  • 网站 常见推广阿里云空间+1对1私人专属设计师
  • 建设网站需要那些技术人员高手优化网站
  • 手机老是下载一些做任务的网站b站推广网站2024
  • wordpress管理页面密码忘记漯河seo公司
  • 网站建设销售ppt模板免费建立一个网站
  • 临平做网站怎么做网络推广赚佣金
  • 找人合伙做网站平台班级优化大师官网下载
  • 五十一团 黑龙江生产建设兵团知青网站站内推广方式
  • 网站设置默认首页seo个人博客
  • 最早做网购的网站电子技术培训机构
  • wordpress图片编辑下载优化大师并安装
  • 网站改版 升级的目的互联网营销方式
  • 广州黄埔做网站郑州见效果付费优化公司