缓存相关

前言

今天看了一个博客,了解了一下关于缓冲一致性与穿透的问题,特此记录一下

缓存穿透

概念:什么是缓存穿透?

  其实按照字面意思理解很简单,就是穿透缓存,直接访问DB。举个例子吧,假设使用的是redis,我们使用key,value来进行存储,当我们查询一个key时发现其不存在,我们以为是没命中,所以就去数据库中查找,查找之后发现也没有,这时候我们才知道原来就没有这个数据。这是一个很正常的场景,但你想想,每次查找一个根本不存在的记录时,都要穿过缓存直接访问数据库,无疑带来了没必要的开销,因为数据本身就没有嘛,所以缓存自然没有。
  其实这个问题很危险,假设有个人一直使用一个不存在的id访问,这时候会一直访问数据库,数据库可能就会宕机.....(类似于拒绝服务攻击一样)

  那么怎么解决这个问题呢?怎么拦截一些查询结果为null的请求呢,让其访问缓存的时候就知道结果是null呢?

  其实很简单,要想让它拦截,你就要给它数据啊,让它知道什么该拦什么可以放行,我在网上看到了两种解决办法:

  • 1、就是把那些数据库访问结果为null的也存储在缓冲中,对应key的value设置成一个空对象就行了,这样下次再来的时候就可以直接返回了,等数据库相应更新之后就来更新这个key

  • 2、还有之中就是使用布隆过滤器,访问结果为空的就存储在这里,每次有访问为空的就更新一下这个过滤器,用这个就可以过滤掉一些重复的
     我个人觉得比较喜欢第二种方法,第一种感觉开销太大了,

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,326评论 19 139
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,239评论 2 89
  • 使用缓存是系统性能优化的第一黄金法则。 缓存的设计和使用对一个系统的性能至关重要,平时接触到项目无论多少也都会在某...
    刀刃丿阅读 1,380评论 0 6
  • 《聊斋》以画为题有《画壁》、《画皮》和《画马》。 前两幅画和《崂山道士》都在第一卷,不仅堪称压卷,放到整个《聊斋志...
    觉史氏阅读 5,568评论 0 0
  • 《雨声》:你来时,天地忽然暗淡,随着雷声的咆哮,带着电闪雷鸣,天地盖上一层白里透着黑的密布,散发着沉闷、压抑的气氛...
    柔情似水花相遇阅读 257评论 0 0

友情链接更多精彩内容