Redis缓存穿透

一、什么是缓存穿透

在客户端发送请求查询数据的时候,先是查询缓存,若缓存中没有该数据,再去查询数据库,查到数据以后返回给客户端,并且将该数据写入缓存中。如果有大量的请求查询不存在的数据,会给数据库带来极大的压力,这个就是缓存穿透。

二、怎么解决缓存穿透

  1. 对空值做缓存
    如果一个查询返回的数据为null(不管数据是否存在),我们扔把这个空结果进行缓存,设置很短的空结果的过期时间,最长不超过5min。
  2. 设置白名单
    利用bitmaps,定义一个可访问的白名单,名单id为birmaps的偏移量,每次访问都要和bitmaps中的白名单进行比较,若id不在bitmaps中,不允许访问。
  3. 布隆过滤器
    布隆过滤器是一个bit向量或者说是一个bit数组,使用的时候将值映射通过多个不同的哈希函数生成多个哈希值,并对每个生成的hash值指向的bit位置为1。查询的时候只需要看指定位置的值是否为1,查询结果只能是一定不存在和可能存在。图示是一个初始化的过滤器。
    在这里插入图片描述
    在向其中存入baidu,假如通过hash算法得到三个值:1,2,5,则此时的数组为
    在这里插入图片描述
    再向其中存入taobao,得到的值是2,4,6,此时的数组为:
    在这里插入图片描述
    查找Tencent,hash值为2,3,4,此时3位置为0,因此Tencent肯定不存在,但是在查找baidu的时候,可以说baidu一定存在吗?也不可以,只能说baidu可能存在。因此布隆过滤器有一定的误识别率并且位移以后的数组无法删除。
  4. 进行实时监控
    请运维人员配合,排查访问对象和数据,设置黑名单服务。

版权声明:本文为qq_45655489原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。