有关于缓存穿透以及解决方案

缓存穿透:查询一个不存在的数据,MySQL查不到数据,也无法写入缓存,就会导致每次请求都会查询数据库,当程序被人恶意攻击,如,每次查询都查询id=-1的操作,当请求数量达到一定的次数,就会造成缓存穿透

解决方案一:

缓存空数据,查询返回的数据为空,仍然把这个数据存入到缓存中

优点:简单

缺点:当有大量的id查询出来的数据都是null,缓存的压力大

           有可能会发生数据不一致的问题,如第一次查询的值为null,在第二次请求查询之前,一个值储存进了这里,那第一次查询和第二次查询就会发生数据不一致的问题

解决方案二:

布隆过滤器:可以检索一个数据是否在一个集合(bitmap集合)中,实现方案:redisson,guara

bitmap:是一个以位为单位的集合,数组中每个单元只能存储0或1

当我们存储数据的时候,可以通过多个hash函数获取hash值,根据哈希计算数组的对应位置的值该为1(初始状态全是0),当我们取数据的时候使用相同的数据获取hash值,判断对应位置的值是否都是1

优点:节省内存

缺点:存在误判,数组越小,误判率越大,数组越大,误判率越小,但是数组大也会造成更多内存消耗 ,我们可以在初始的时候设置误判率,一般设置在百分之五左右,不会占用过多内存,同时也不会在高并发下被穿透

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值