一.什么是缓存穿透?
某查询缓存中在redis没有命中,会尝试从数据库中获取,从而导致大量请求到达数据库,如果数据库中本身没有该数据,会导致大量请求被送达数据库进行查询,这就导致数据库中并发的去执行了很多不必要的查询操作,从而导致巨大冲击和压力。
二.解决方案
*1.缓存空对象
如果缓存层和存储层都没有命中,设置key-null,为其缓存空对象,并设置过期时间
*2.布隆过滤器
使用布隆过滤器,维护一个bitmap。布隆算法可以客户端实现,也可以直接使用redis中额外引用的,bitmap可以由客户端维护,也可以由redis维护。大致是,bitmap中标记已有的数据,没有的数据直接由维护的bitmap过滤掉,从而不再访问数据库。存在一定概率误标记(概率小于1%),但是成本低。
redis集成布隆过滤器参考:https://blog.csdn.net/qq_41125219/article/details/119982158