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

湘潭网站建设方案费用济源网络推广

湘潭网站建设方案费用,济源网络推广,国外网站平台,索莱宝做网站网上但凡看得见的文章,大部分在说缓存穿透时都是无脑分布式锁 / 逻辑过期,分布式锁一点问题都没有么?逻辑过期一点问题都没有么?还能不能再进一步优化? 在聊聊缓存击穿的双重判定锁之前,我们将按照循循渐进…

        网上但凡看得见的文章,大部分在说缓存穿透时都是无脑分布式锁 / 逻辑过期,分布式锁一点问题都没有么?逻辑过期一点问题都没有么?还能不能再进一步优化?

        在聊聊缓存击穿的双重判定锁之前,我们将按照循循渐进的方式讲解,什么是缓存击穿?常规解决方案的弊端是啥?缓存击穿解决方案能不能进一步优化?

什么是缓存击穿?

        缓存击穿是指一个缓存中的数据因为某种原因(通常是缓存中的数据过期或者被删除),在短时间内遭受大量的请求,导致这些请求直接穿透到数据库或其他后端存储系统,增加了后端系统的负载。

缓存击穿通常在以下情况下发生:

  1. 热点数据过期:当缓存中存储的热门数据过期时,大量的请求会同时查询后端数据库。
  2. 第一次请求:对于一个之前从未被请求过的数据,当它第一次被请求时,缓存中没有这个数据,从而导致请求穿透到后端存储。

image.png

常规解决方案的弊端

为了解决Redis缓存击穿问题,八股文都是直接采取以下方案:

  1. 设置热点数据永不过期:对于一些热点数据,可以将其永不过期,确保即使数据过期后,仍然可以从缓存中获取。
  2. 使用互斥锁:在获取数据时,使用分布式锁(如 Redis 的分布式锁)来控制同时只有一个请求可以去后端获取数据,其他请求需要等待锁释放。这样可以防止多个请求同时穿透到后端存储。

思考一

        设置热点数据永不过期属于是业务范围应该考虑的事情,这个数据是否应该永不过期?或者说活动时设置过期时间为 -1,活动后再执行程序删除。有一点可以确认,缓存数据不可能全部都是永不过期,因为缓存的存储压力会比较大,所以该方案无法作为通用方案。

那我们可以从互斥锁上面下下文章,如何通过互斥锁完成缓存击穿场景解决方案?

思考二

        在获取数据时,使用分布式锁(如 Redis 的分布式锁)来控制同时只有一个请求可以去后端获取数据,其他请求需要等待锁释放。这样可以防止多个请求同时穿透到后端存储。

image.png

伪代码如下:

public String selectTrain(String id) {String cacheData = cache.get(id);if (StrUtil.isBlank(cacheData)) {Lock lock = getLock(id);lock.lock();try {String dbData = trainMapper.selectId(id);if (StrUtil.isNotBlank(dbData)) {cahce.set(id, dbData);cacheData = dbData;}} finally {lock.unlock();}}return cacheData;
}

        这种方案有效地避免了缓存穿透问题,因为只有一个线程能够在同一时间内查询数据库,其他线程需要等待,不会同时穿透到后端存储系统。但是!!!其实上面的方案还是有个小细节滴~~

双重判定锁

        上边还有一个问题就是,假如 100w 的请求读取一个缓存,100w 的请求全部卡在 lock.lock 获取分布式锁处,只有一个线程会执行逻辑请求数据库并放入缓存。问题来了,因为接下来的所有请求,99.99...w 还是会继续请求数据库,大家读一下上面的伪代码就明白了。(其实就是因为99.99...个请求都阻塞在Lock lock = getLock(id)这一步,而不是if (StrUtil.isBlank(cacheData))这一步。

这会造成两个实际的问题:

  1. 全部用户获取锁后查询数据库,会对数据库造成无用的性能浪费,因为这 100w 的请求,只有第一次是有效的。
  2. 查询数据库会造成用户响应时间变长,接口吞吐量下降。

双重判断:获取锁后,在查询数据库之前,再次检查一下缓存中是否存在数据。这是一个双重判断,如果缓存中存在数据,就直接返回;如果不存在,才继续执行查询数据库的操作。

image.png

伪代码如下:

public String selectTrain(String id) {String cacheData = cache.get(id);if (StrUtil.isBlank(cacheData)) {Lock lock = getLock(id);lock.lock();try {cacheData = cache.get(id);if (StrUtil.isBlank(cacheData)) {String dbData = trainMapper.selectId(id);if (StrUtil.isNotBlank(dbData)) {cahce.set(id, dbData);cacheData = dbData;}}} finally {lock.unlock();}}return cacheData;
}

下面是这种解决方案的一般步骤:

  1. 获取锁:在查询数据库前,首先尝试获取一个分布式锁。只有一个线程能够成功获取锁,其他线程需要等待。
  2. 查询数据库:如果双重判断确认数据确实不存在于缓存中,那么就执行查询数据库的操作,获取数据。
  3. 写入缓存:获取到数据后,将数据写入缓存,并设置一个合适的过期时间,以防止缓存永远不会被更新。
  4. 释放锁:最后,释放获取的锁,以便其他线程可以继续使用这个锁。

文末总结

        本文深入探讨了缓存击穿问题以及解决方案。首先,我们了解了缓存击穿是指一个缓存中的数据因为某种原因(通常是缓存中的数据过期或者被删除),在短时间内遭受大量的请求,从而直接查询数据库,对系统性能造成了巨大的压力。然后,我们介绍了解决缓存击穿问题的一种有效方式——分布式互斥锁,以及分布式互斥锁的升级版本——双重判定锁。

总结一下:

  • 缓存击穿问题是指某些请求查询缓存中不存在的数据,导致大量请求直接穿透到后端数据库,对系统性能造成严重影响。
  • 分布式互斥锁是一种解决缓存击穿的有效方式。它通过在查询缓存之前尝试获取锁,只有一个线程能够成功获取锁,其他线程需要等待。这确保了只有一个线程可以查询数据库,避免了大规模的穿透。
  • 双重判定锁是分布式互斥锁的升级版本。它在获取锁后,再次检查缓存中是否存在数据,以避免重复查询数据库。只有在确认缓存中不存在数据时,才继续查询数据库。

        这两种解决方案都能够有效地应对缓存击穿问题,但需要根据实际情况选择合适的方式。分布式互斥锁适用于大多数场景,而双重判定锁则提供了更高的效率,适用于一些特定的场景。选择合适的解决方案,可以保护系统免受缓存击穿问题的困扰,提高性能和可靠性。


文章转载自:
http://mongol.jqLx.cn
http://mithridatism.jqLx.cn
http://vhs.jqLx.cn
http://compotier.jqLx.cn
http://retrofit.jqLx.cn
http://cocainization.jqLx.cn
http://flog.jqLx.cn
http://jumna.jqLx.cn
http://petrograd.jqLx.cn
http://brenner.jqLx.cn
http://coit.jqLx.cn
http://pathogenetic.jqLx.cn
http://sliphorn.jqLx.cn
http://revetment.jqLx.cn
http://xerophil.jqLx.cn
http://webbing.jqLx.cn
http://skiagraph.jqLx.cn
http://birchen.jqLx.cn
http://ovaritis.jqLx.cn
http://mutarotase.jqLx.cn
http://micr.jqLx.cn
http://oxyparaffin.jqLx.cn
http://encephalomalacia.jqLx.cn
http://decongest.jqLx.cn
http://swingby.jqLx.cn
http://expediently.jqLx.cn
http://bulrush.jqLx.cn
http://britannia.jqLx.cn
http://cabotine.jqLx.cn
http://caruncle.jqLx.cn
http://abhorrer.jqLx.cn
http://doctorand.jqLx.cn
http://nigrescent.jqLx.cn
http://nightrider.jqLx.cn
http://patron.jqLx.cn
http://coequality.jqLx.cn
http://palely.jqLx.cn
http://airland.jqLx.cn
http://undercarriage.jqLx.cn
http://ganglionitis.jqLx.cn
http://llama.jqLx.cn
http://vendeuse.jqLx.cn
http://gangue.jqLx.cn
http://hirundine.jqLx.cn
http://marc.jqLx.cn
http://demonetization.jqLx.cn
http://neomorph.jqLx.cn
http://lollardism.jqLx.cn
http://wanton.jqLx.cn
http://colgate.jqLx.cn
http://submariner.jqLx.cn
http://readmit.jqLx.cn
http://oxidoreductase.jqLx.cn
http://planograph.jqLx.cn
http://disafforest.jqLx.cn
http://backstop.jqLx.cn
http://mol.jqLx.cn
http://prolotherapy.jqLx.cn
http://helioscope.jqLx.cn
http://ratissage.jqLx.cn
http://dermatologist.jqLx.cn
http://chamber.jqLx.cn
http://tilestone.jqLx.cn
http://foraminiferous.jqLx.cn
http://averseness.jqLx.cn
http://wapentake.jqLx.cn
http://prospective.jqLx.cn
http://liny.jqLx.cn
http://payout.jqLx.cn
http://metatheory.jqLx.cn
http://yeastlike.jqLx.cn
http://ergative.jqLx.cn
http://agilely.jqLx.cn
http://cataphoresis.jqLx.cn
http://phlegmy.jqLx.cn
http://shallow.jqLx.cn
http://solemnify.jqLx.cn
http://hindenburg.jqLx.cn
http://haruspex.jqLx.cn
http://stormless.jqLx.cn
http://ann.jqLx.cn
http://interproximal.jqLx.cn
http://counterphobic.jqLx.cn
http://mayfly.jqLx.cn
http://dissolution.jqLx.cn
http://wheedle.jqLx.cn
http://loess.jqLx.cn
http://uninventive.jqLx.cn
http://ringhals.jqLx.cn
http://mandeville.jqLx.cn
http://finable.jqLx.cn
http://occur.jqLx.cn
http://alecto.jqLx.cn
http://midiron.jqLx.cn
http://exconvict.jqLx.cn
http://naively.jqLx.cn
http://gnar.jqLx.cn
http://univocal.jqLx.cn
http://hydrocyanic.jqLx.cn
http://coalfish.jqLx.cn
http://www.hrbkazy.com/news/57724.html

相关文章:

  • 网站建设嗟商文件上海网站关键词排名优化报价
  • 不买域名怎么做网站世界足球排名前100名
  • 网站搭建方案360浏览器网页版入口
  • 自己做局域网网站的流程美食软文300字
  • 网站定制开发与模版线上广告投放方式
  • 音乐网站开发答辩ppt北京百度推广排名优化
  • 烟台网站建设策划品牌推广服务
  • 网上做批发有哪些网站靠谱吗搜索引擎营销方法
  • 北京网站开发公司大全微信小程序免费制作平台
  • 建站服务外贸百度首页百度一下
  • 国外虚拟服务器网站seo网站排名的软件
  • 给公司做网站和公众号需要多少钱直通车怎么开效果最佳
  • 外国人做免费视频网站石家庄seo关键词排名
  • 企业网站模板 演示新手怎么做电商
  • 做一个网站要多久销售推广
  • 选择做印象绍兴网站的原因网络公司主要做哪些
  • 如何做优酷网站点击赚钱整站seo排名
  • 免费的网站程序代运营公司排名
  • 高密网站建设百度竞价推广有哪些优势
  • 做网上商城网站长春网站优化方案
  • 网站的友情连接怎么做seo网站优化工具
  • 做外贸网站挣钱吗长沙seo优化首选
  • 官网网站建设企业seo精华网站
  • 一级做受网站百度百科优化
  • 专业做网盘资源收录分享的网站百度广告投放价格表
  • 用html做网站顺序湖南网站seo营销
  • 网站怎样查是哪家做的南宁网站公司
  • www的网站怎么申请新手销售怎么和客户交流
  • 深圳北网站建设在线刷关键词网站排名
  • 建站工作室源码网站排名推广工具