概念
缓存穿透是指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到DB去查询,可能导致DB挂掉。这种情况大概率是遭到了攻击。
解决方案
方案一:将每次查询到为null的值存入redis
优点:简单
缺点:消耗内存,可能会出现数据不一致的情况
方案二:使用布隆过滤器
布隆过滤器主要是用于检索一个元素是否在一个集合中。
优点:内存占用较少,没有多余的key
缺点:实现复杂,存在误判
底层原理:
它的底层主要是先去初始化一个比较大数组(bitmap),里面存放的二进制0或1。在一 开始都是0,当一个key来了之后经过3次hash计算,模于数组长度找到数据 的下标然后把数组中原来的0改为1,这样的话,三个数组的位置就能标明一 个key的存在。查找的过程也是一样的。 当然是有缺点的,布隆过滤器有可能会产生一定的误判,我们一般可以设置 这个误判率,大概不会超过5%,其实这个误判是必然存在的,要不就得增 加数组的长度,其实已经算是很划分了,5%以内的误判率一般的项目也能 接受,不至于高并发下压倒数据库。
标签:缓存,数组,误判,redis,布隆,穿透,key,过滤器 From: https://blog.csdn.net/weixin_45693326/article/details/140252313