缓存穿透问题

缓存穿透 :缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。

常见的两种解决方案:

1.缓存空对象

优点:实现简单,维护方便

缺点:占用较大的内存,可能会造成短期数据不一致

思路:如果数据在数据库中不存在,则返回一个空对象,并将其缓存在redis

2.布隆过滤器

优点:内存占用较少,没有多余key

缺点:实现复杂,存在误判可能

思路:

通过一个庞大的二进制数组,走哈希思想去判断当前这个要查询的这个数据是否存在,如果布隆过滤器判断存在,则放行,这个请求会去访问redis,哪怕此时redis中的数据过期了,但是数据库中一定存在这个数据,在数据库中查询出来这个数据后,再将其放入到redis中,假设布隆过滤器判断这个数据不存在,则直接返回,这种方式优点在于节约内存空间,存在误判,误判原因在于:布隆过滤器走的是哈希思想,只要哈希思想,就可能存在哈希冲突

2.1为啥会存在哈希冲突导致误判

这就得说说布隆过滤器是怎么增加和查询元素的!!!

布隆过滤器由一个固定大小的二进制向量和一系列哈希函数组成

现在有”Apple"和“Orange”两个单词存入,首先对于“Apple"单词利用三个哈希函数得到1,5,10,并将1,5,10置1

同理对“Orange”利用哈希函数计算得2,5,7,并将相应位置置1

当查询“Apple”时利用哈希函数得到三个哈希值1,5,7,这时发现三个位置均为1则表示"Apple"可能存在,但是如果这时候数据库中没有"Banana",但是哈希值为1,2,5,这时候就可能发生误判

相关推荐

  1. Redis中的缓存雪崩、缓存击穿、缓存穿透问题

    2024-04-08 04:36:02       20 阅读
  2. 缓存穿透问题与解决方案

    2024-04-08 04:36:02       27 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-08 04:36:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-08 04:36:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-08 04:36:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-08 04:36:02       18 阅读

热门阅读

  1. AI创业机会的探索

    2024-04-08 04:36:02       16 阅读
  2. MySQL-对象

    2024-04-08 04:36:02       12 阅读
  3. C++20 semaphore(信号量) 详解

    2024-04-08 04:36:02       13 阅读
  4. P1162 填涂颜色

    2024-04-08 04:36:02       18 阅读
  5. make命令简介

    2024-04-08 04:36:02       15 阅读
  6. 大学课堂点名程序

    2024-04-08 04:36:02       13 阅读
  7. Docker 入门

    2024-04-08 04:36:02       14 阅读
  8. 【Qt\C++】二维图形化故障树

    2024-04-08 04:36:02       12 阅读
  9. 洛谷 P3512 [POI2010] PIL-Pilots

    2024-04-08 04:36:02       12 阅读
  10. 06-kafka配置

    2024-04-08 04:36:02       10 阅读