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

池州专业网站建设怎么样模板建站流程

池州专业网站建设怎么样,模板建站流程,塑料袋销售做哪个网站推广好,潍坊高级网站建设推广前言 数据库和缓存#xff08;比如#xff1a;redis#xff09;双写数据一致性问题#xff0c;是一个跟开发语言无关的公共问题。尤其在高并发的场景下#xff0c;这个问题变得更加严重。 我很负责的告诉大家#xff0c;该问题无论在面试#xff0c;还是工作中遇到的概率…前言 数据库和缓存比如redis双写数据一致性问题是一个跟开发语言无关的公共问题。尤其在高并发的场景下这个问题变得更加严重。 我很负责的告诉大家该问题无论在面试还是工作中遇到的概率非常大所以非常有必要跟大家一起探讨一下。 今天这篇文章我会从浅入深跟大家一起聊聊数据库和缓存双写数据一致性问题常见的解决方案这些方案中可能存在的坑以及最优方案是什么。 1、 常见方案 通常情况下我们使用缓存的主要目的是为了提升查询的性能。大多数情况下我们是这样使用缓存的 用户请求过来之后先查缓存有没有数据如果有则直接返回。 如果缓存没数据再继续查数据库。 如果数据库有数据则将查询出来的数据放入缓存中然后返回该数据。 如果数据库也没数据则直接返回空。 这是缓存非常常见的用法。一眼看上去好像没有啥问题。 但你忽略了一个非常重要的细节如果数据库中的某条数据放入缓存之后又立马被更新了那么该如何更新缓存呢 不更新缓存行不行 答当然不行如果不更新缓存在很长的一段时间内决定于缓存的过期时间用户请求从缓存中获取到的都可能是旧值而非数据库的最新值。这不是有数据不一致的问题 那么我们该如何更新缓存呢 目前有以下4种方案 先写缓存再写数据库 先写数据库再写缓存 先删缓存再写数据库 先写数据库再删缓存 接下来我们详细说说这4种方案。 2、先写缓存再写数据库 对于更新缓存的方案很多人第一个想到的可能是在写操作中直接更新缓存写缓存更直接明了。 那么问题来了在写操作中到底是先写缓存还是先写数据库呢 我们在这里先聊聊先写缓存再写数据库的情况因为它的问题最严重。 某一个用户的每一次写操作如果刚写完缓存突然网络出现了异常导致写数据库失败了。其结果是缓存更新成了最新数据但数据库没有这样缓存中的数据不就变成脏数据了如果此时该用户的查询请求正好读取到该数据就会出现问题因为该数据在数据库中根本不存在这个问题非常严重。 我们都知道缓存的主要目的是把数据库的数据临时保存在内存便于后续的查询提升查询速度。 但如果某条数据在数据库中都不存在你缓存这种“假数据”又有啥意义呢 因此先写缓存再写数据库的方案是不可取的在实际工作中用得不多。 3、先写数据库再写缓存 既然上面的方案行不通接下来聊聊先写数据库再写缓存的方案该方案在低并发编程中有人在用我猜的。 用户的写操作先写数据库再写缓存可以避免之前“假数据”的问题。但它却带来了新的问题。 什么问题呢 3.1 写缓存失败了 如果把写数据库和写缓存操作放在同一个事务当中当写缓存失败了我们可以把写入数据库的数据进行回滚。 如果是并发量比较小对接口性能要求不太高的系统可以这么玩。 但如果在高并发的业务场景中写数据库和写缓存都属于远程操作。为了防止出现大事务造成的死锁问题通常建议写数据库和写缓存不要放在同一个事务中。 也就是说在该方案中如果写数据库成功了但写缓存失败了数据库中已写入的数据不会回滚。 这就会出现数据库是新数据而缓存是旧数据两边数据不一致的情况。 3.2 高并发下的问题 假设在高并发的场景中针对同一个用户的同一条数据有两个写数据请求a和b它们同时请求到业务系统。 其中请求a获取的是旧数据而请求b获取的是新数据如下图所示 请求a先过来刚写完了数据库。但由于网络原因卡顿了一下还没来得及写缓存。 这时候请求b过来了先写了数据库。 接下来请求b顺利写了缓存。 此时请求a卡顿结束也写了缓存。 很显然在这个过程当中请求b在缓存中的新数据被请求a的旧数据覆盖了。 也就是说在高并发场景中如果多个线程同时执行先写数据库再写缓存的操作可能会出现数据库是新值而缓存中是旧值两边数据不一致的情况。 3.3、浪费系统资源 该方案还有一个比较大的问题就是每个写操作写完数据库会马上写缓存比较浪费系统资源。 为什么这么说呢 你可以试想一下如果写的缓存并不是简单的数据内容而是要经过非常复杂的计算得出的最终结果。这样每写一次缓存都需要经过一次非常复杂的计算不是非常浪费系统资源吗 尤其是cpu和内存资源。 还有些业务场景比较特殊写多读少。 如果在这类业务场景中每个用的写操作都需要写一次缓存有点得不偿失。 由此可见在高并发的场景中先写数据库再写缓存这套方案问题挺多的也不太建议使用。 如果你已经用了赶紧看看踩坑了没
http://www.dnsts.com.cn/news/88397.html

相关文章:

  • 长治怎么做平台软件沈阳seo推广
  • 潍坊做网站的那家好深圳网络营销做什么的
  • 小说网站怎么做原创wordpress超链接代码
  • 商城网站如何提高收录WordPress 4.8.1 增强版
  • 珠海网站制作价格清远建设网站制作
  • 江西网站建设企业网站建设的发展前景
  • 建设好网站的在线沟通功能wordpress找回密码页面
  • 网站开发流程丽江搜索引擎在线观看
  • 网站 htmlwordpress 免签约支付
  • 怎么介绍自己的网站建设网站建设工具哪个好用
  • 云南住房与城乡建设厅网站wordpress 文章点赞数
  • 做网站挣钱么广东哪有做网赌网站
  • 网站建设案例行业现状703804散讲温州论坛
  • 网站开发公司源码软件系统开发报价单
  • 什么是网站什么是网址怎么是营销型网站建设
  • 南昌哪里有网站建设太原网站建设信息推荐
  • 手机网站维护费欧美风格的网页设计欣赏
  • 北京网站策划联系电话广东手机网站建设
  • 绵阳top唯艺网站建设中山建网站找哪家
  • 如何自己建一个公司网站做韩国网站有哪些
  • js做网站框架个人网站能做什么
  • 西安做网站公司 玖佰网络广告影视制作谁家好
  • 网站移动转换全国信用信息公示系统官网
  • 西安网站快速排名提升wordpress wp_head
  • 如何建设一个工业品采购网站天眼查询企业信息官网入口
  • 宁波营销型网站建设优化建站智能建站系统开发
  • wordpress 站点地址咸阳住房和城乡建设规划局网站
  • 惠州建设局官方网站网络工程师资料
  • 网站建设论文的部首网站的欢迎页怎么做
  • 如何查找网站php用户管理系统源码