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

网站建设开票内容些什么wordpress视频分享

网站建设开票内容些什么,wordpress视频分享,如何成为app推广代理,在北京网站建设的岗位职责缓存虽然可以提高查询数据的的性能#xff0c;但是在缓存和数据 进行更新的时候 其实会出现数据不一致现象#xff0c;而这个不一致其实可能会给业务来带一定影响。无论是Redis 分布式缓存还是其他的缓存机制都面临这样的问题。 数据不一致是如何发生#xff1f; 数据一致…缓存虽然可以提高查询数据的的性能但是在缓存和数据 进行更新的时候 其实会出现数据不一致现象而这个不一致其实可能会给业务来带一定影响。无论是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_USERid;//1 先从redis里面查询如果有直接返回结果如果没有再去查询mysqluser (User) redisTemplate.opsForValue().get(key);if(user null){//2 redis里面无继续查询mysqluser userMapper.selectByPrimaryKey(id);if(user null){//3.1 redismysql 都无数据//你具体细化防止多次穿透我们业务规定记录下导致穿透的这个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_USERid;//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://www.dnsts.com.cn/news/139989.html

相关文章:

  • 企业网站模板 优帮云wordpress 幻灯片手机端字体
  • 有四川建设人才网这个网站吗甜橙直播
  • 华创网站建设营销网站建设一薇
  • 网站更换主机注意做网站前端用什么软件
  • php技术的网站开发wordpress 获取文章评论数
  • jsp网站开发过程建设银行手机行网站
  • 信得过的网站开发推广麻豆精产三产区区别
  • 专业做冻货的网站网站下方一般放什么原因
  • 怎么推广公司的网站怎么管理网站数据库
  • 模板网站制作多少钱登录入口网址
  • 网站设计销售好做吗上海外贸界龙彩印有限公司
  • 网站百度商桥医药cms是什么意思
  • 外贸网站推广中山免费一键生成证件照
  • 怎么做淘宝联盟网站网站开发字体选择
  • 网站改版中 模板北京网站设计课程
  • 怎样给公司做一个网站seo基础课程
  • 做ppt素材网站哪个好做网站就是做信息整合
  • 小男孩和女人做的网站深圳注册公司在什么网站
  • 网站弹窗设计江苏建设网
  • 电商运营和网站运营对比菠菜网站模板
  • 海口自助建站西安市建设工程信息网招投标平台
  • 手机网站如何做做书店网站版头
  • 哪里有创建网站的北京网络公司网站
  • 清新区住房和城乡建设局网站怎样制作公众号平台
  • wordpress建立网站实例河南seo
  • 网站建设 ui 企业网站小程序开发网站设计制作
  • 网站开发制作合同范本链接买卖平台
  • 珠海网站制作做一个公司网站大概要多少钱
  • 如何一键建淘宝客网站建导航网站
  • 湖北省建设厅官方网站资料网广东网络建设公司