缓存相关

作者: 维特无忧堡 | 来源:发表于2018-07-25 23:06 被阅读0次

前言

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

缓存穿透

概念:什么是缓存穿透?

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

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

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

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

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

相关文章

  • 触发式的缓存一致性方式

    当读取缓存的时候,如果缓存里没有相关数据,则执行相关的业务逻辑,构造缓存数据存入到缓存系统; 当与缓存项相关的资源...

  • 缓存相关

    前言 今天看了一个博客,了解了一下关于缓冲一致性与穿透的问题,特此记录一下 缓存穿透 概念:什么是缓存穿透?   ...

  • 缓存相关

    1.缓存穿透 一般缓存是key-value结构,查询是使用key查询value,缓存中查不到,则需要去db中取值;...

  • 缓存相关

    缓存穿透 什么是缓存穿透? 一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统...

  • 缓存相关

    Expires和Cache-Control Expires: Http1.0Cache-Control: Http...

  • 缓存相关

    1.使用第三方框架sdWebImage 下载的图片,要计算出他的大小,使用 获取文件夹缓存原理:1.获取文件夹路径...

  • 缓存相关

    cache淘汰算法:LIRS 算法 缓存那些事 Redis缓存淘汰算法,LRU算法,LRU算法讲解

  • SDWebImage源码学习-缓存篇

    SDImageCacheConfig(配置缓存相关属性) SDImageCache 初始化 清除缓存 缓存图片 读...

  • SDWebImage图片缓存清理以及缓存大小计算

    SDWebImage缓存的相关操作主要通过SDImageCache这个类实现 缓存清理 缓存大小 app中清除缓存...

  • Glide的内存缓存思路

    Glide缓存功能相关用法 设置内存缓存开关: skipMemoryCache(true) 设置磁盘缓存模式: d...

网友评论

    本文标题:缓存相关

    本文链接:https://www.haomeiwen.com/subject/pfammftx.html