【Redis】缓存穿透

问题发生背景:客户端请求的数据再缓存中和数据库中都不存在。
导致的问题:缓存永远不会生效,这些请求都会去请求数据库—导致数据库压力增大。
解决方案:
1.缓存空对象
在Redis中缓存空对象,告诉客户端数据库中没有该值。 该方法得设置一个短时间的TTL。
优点:实现简单,维护方便
缺点:会有额外的内存消耗,可能造成短期的不一致。 —数据库更新的时候,缓存还没变。
在这里插入图片描述
2.布隆过滤:
在这里插入图片描述
总体思路如上图所示,就是在客户端取数据的时候先访问布隆过滤器,得到数据库是否包含该数据的结果,有再访问没有就不访问。
布隆过滤器原理:
其实这就是一个哈希算法,哈希查询算法,
哈希算法是借助哈希表查找目标元素的方法,其中用的是哈希函数。
key = f(value)。f()是哈希函数,得到的结果是目标元素的key。
而在布隆过滤器这里,我们不需要知道目标元素的key,我们只需要知道这个元素存不存在,所以,我们的散列函数里面存储的就是0和1,0表示不存在,1表示存在。
而布隆过滤器的实现:

  1. 建立一个二进制向量,将所有位设置为0.
  2. 选定k个散列函数,用于对元素进行k次散列,计算向量的位下标。
  3. 添加元素,每添加一个就用k个散列函数分别作用于元素,生成对应下标,并将对应的值设为1.
  4. 检查元素,检查一遍是否都是1。

在这里插入图片描述

相关推荐

  1. redis缓存雪崩,缓存穿透

    2024-03-18 18:28:02       41 阅读
  2. Redis缓存击穿、缓存雪崩、缓存穿透

    2024-03-18 18:28:02       56 阅读
  3. Redis 缓存穿透是什么?如何缓解缓存穿透

    2024-03-18 18:28:02       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-18 18:28:02       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-18 18:28:02       97 阅读
  3. 在Django里面运行非项目文件

    2024-03-18 18:28:02       78 阅读
  4. Python语言-面向对象

    2024-03-18 18:28:02       88 阅读

热门阅读

  1. 程序员应该如何选择职业赛道?

    2024-03-18 18:28:02       36 阅读
  2. 鸿蒙内核系统

    2024-03-18 18:28:02       41 阅读
  3. 5.66 BCC工具之offwaketime.py解读

    2024-03-18 18:28:02       39 阅读
  4. 备份恢复新体验!pgBackRest与IvorySQL的完美融合

    2024-03-18 18:28:02       31 阅读
  5. Spring概述总结

    2024-03-18 18:28:02       44 阅读
  6. Linux的内存计算不准如何解决?

    2024-03-18 18:28:02       42 阅读