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

网站的后续优化方案参考消息电子版官网

网站的后续优化方案,参考消息电子版官网,网站建设 信息化程度,免费注册公众号在大型系统中#xff0c;为了减少数据库压力通常会引入缓存机制#xff0c;一旦引入缓存又很容易造成缓存和数据库数据不一致#xff0c;导致用户看到的是旧数据。 为了减少数据不一致的情况#xff0c;更新缓存和数据库的机制显得尤为重要#xff0c;接下来带领大家踩踩…在大型系统中为了减少数据库压力通常会引入缓存机制一旦引入缓存又很容易造成缓存和数据库数据不一致导致用户看到的是旧数据。 为了减少数据不一致的情况更新缓存和数据库的机制显得尤为重要接下来带领大家踩踩坑。 1读请求常见流程 应用首先会判断缓存是否有该数据缓存命中直接返回数据缓存未命中即缓存穿透到数据库从数据库查询数据然后回写到缓存中最后返回数据给客户端。 2写请求常见流程 首先更新数据库然后从缓存中删除该数据。 看了写请求的图之后有些同学可能要问了为什么要删除缓存直接更新不就行了这里涉及到几个坑我们一步一步踩下去。 Cache aside踩坑 Cache aside策略如果用错就会遇到深坑下面我们来逐个踩。 踩坑一先更新数据库再更新缓存 如果同时有两个写请求需要更新数据每个写请求都先更新数据库再更新缓存在并发场景可能会出现数据不一致的情况 如上图的执行过程 1写请求1更新数据库将 age 字段更新为18 2写请求2更新数据库将 age 字段更新为20 3写请求2更新缓存缓存 age 设置为20 4写请求1更新缓存缓存 age 设置为18 执行完预期结果是数据库 age 为20缓存 age 为20结果缓存 age为18这就造成了缓存数据不是最新的出现了脏数据。 踩坑二先删缓存再更新数据库 如果写请求的处理流程是先删缓存再更新数据库在一个读请求和一个写请求并发场景下可能会出现数据不一致情况。 如上图的执行过程 1写请求删除缓存数据 2读请求查询缓存未击中(Hit Miss)紧接着查询数据库将返回的数据回写到缓存中 3写请求更新数据库。 整个流程下来发现数据库中age为20缓存中age为18缓存和数据库数据不一致缓存出现了脏数据。 踩坑三先更新数据库再删除缓存 在实际的系统中针对写请求还是推荐先更新数据库再删除缓存但是在理论上还是存在问题以下面这个例子说明 如上图的执行过程 1读请求先查询缓存缓存未击中查询数据库返回数据 2写请求更新数据库删除缓存 3读请求回写缓存 整个流程操作下来发现数据库age为20缓存age为18即数据库与缓存不一致导致应用程序从缓存中读到的数据都为旧数据。 但我们仔细想一下上述问题发生的概率其实非常低因为通常数据库更新操作比内存操作耗时多出几个数量级上图中最后一步回写缓存set age 18速度非常快通常会在更新数据库之前完成。 如果这种极端场景出现了怎么办我们得想一个兜底的办法缓存数据设置过期时间。通常在系统中是可以允许少量的数据短时间不一致的场景出现。 Read through 在 Cache Aside 更新模式中应用代码需要维护两个数据源头一个是缓存一个是数据库。而在 Read-Through 策略下应用程序无需管理缓存和数据库只需要将数据库的同步委托给缓存提供程序 Cache Provider 即可。所有数据交互都是通过抽象缓存层完成的。 如上图应用程序只需要与Cache Provider交互不用关心是从缓存取还是数据库。 在进行大量读取时Read-Through 可以减少数据源上的负载也对缓存服务的故障具备一定的弹性。如果缓存服务挂了则缓存提供程序仍然可以通过直接转到数据源来进行操作。 Read-Through 适用于多次请求相同数据的场景这与 Cache-Aside 策略非常相似但是二者还是存在一些差别这里再次强调一下 在 Cache-Aside 中应用程序负责从数据源中获取数据并更新到缓存。 在 Read-Through 中此逻辑通常是由独立的缓存提供程序Cache Provider支持。 Write through Write-Through 策略下当发生数据更新(Write)时缓存提供程序 Cache Provider 负责更新底层数据源和缓存。 缓存与数据源保持一致并且写入时始终通过抽象缓存层到达数据源。 Cache Provider类似一个代理的作用。 Write behind Write behind在一些地方也被称为Write back 简单理解就是应用程序更新数据时只更新缓存 Cache Provider每隔一段时间将数据刷新到数据库中。说白了就是延迟写入。 如上图应用程序更新两个数据Cache Provider 会立即写入缓存中但是隔一段时间才会批量写入数据库中。 这种方式有优点也有缺点 优点是数据写入速度非常快适用于频繁写的场景。 缺点是缓存和数据库不是强一致性对一致性要求高的系统慎用。 总结一下 学了这么多相信大家对缓存更新的策略都已经有了清晰的认识。最后稍稍总结一下。 缓存更新的策略主要分为三种 Cache aside Read/Write through Write behind Cache aside 通常会先更新数据库然后再删除缓存为了兜底通常还会将数据设置缓存时间。 Read/Write through 一般是由一个 Cache Provider 对外提供读写操作应用程序不用感知操作的是缓存还是数据库。 Write behind简单理解就是延迟写入Cache Provider 每隔一段时间会批量输入数据库优点是应用程序写入速度非常快。
http://www.yutouwan.com/news/39731/

相关文章:

  • 国际网站怎么进美容院顾客管理系统软件
  • 照片管理网站模板wordpress上传小视频教程
  • 网站设计师简介霸州有做滤芯网站的吗
  • 南京 网站开发用自己的电脑做服务器建网站
  • 怎么样让百度收录网站网页版百度云
  • 重庆网站建设重庆网站建设公司网站建设安阳做网站的费用
  • 您提交的网站域名无备案漫画驿站网页设计图纸尺寸大小
  • 京东的网站建设网页设计教程pdf
  • 湘潭网站建设价格长沙网站建设团队
  • 设计素材网站飘微信端网站设计
  • 网站pv uv是什么意思邯郸网络骗子名单
  • 青岛企业网站建站模板网页设计 收费
  • 用asp做网站需要准备什么软件托管网站费用
  • t恤图案设计网站百度地图网页版入口
  • 之梦英语版网站怎么做网站开发难不难
  • 微信建网站广州论坛网站建设
  • 销售网站内容设计方案百度快照是什么意思?
  • 网站建设 微盘做网站销售的换工作
  • 企业建设门户网站的需求wordpress cron api
  • 赣榆哪里有做网站的网站留言板漏洞
  • 官方网站建设有限公司自己用电脑网站建设
  • 国家网站备案查询系统深圳坪山新楼盘
  • 甘肃兰州是几线城市九江seo
  • 自己怎么优化网站排名苏州实力做网站公司有哪些
  • 网站后台管理系统背景图片大连建设学校网站院长
  • dw做的网站成品长沙发布app
  • iis应用程序池 网站网页紧急升级
  • 做seo是要先有网站吗管理咨询公司是做什么的
  • 响应式网站建设的应用场景万网虚拟主机上传网站
  • 网站安全狗卸载卸载不掉人工智能 网站建设