redis缓存问题

58 阅读1分钟

缓存穿透

原理: 查询一个不存在的数据 ,redis缓存没有该数据,每一次都要查询数据库,导致数据库崩溃

情况:恶意攻击

解决方案:缓存空数据,布隆过滤器 请求之前判断是否存在

什么是布隆过滤器?

主要检索一个元素是否在集合里。首先初始化一个较大的数组,里面存放0和1,刚开始都是0,但一个key进来时,经过三次hash计算就将他

基于模与数组长度将的下标改成1。这个布隆过滤器是存在误差的,那可以设置误差率在5%就好了。

缓存击穿

原理: 某一数据过期,同时有大量同一请求过来,把数据库压垮

互斥锁: 线程1查数据,获取互斥锁 线程二查询缓存未命中 获取锁 休眠等待 完成缓存命中 (线程1一完成就一直等待)

特点: 强一致 性能差

逻辑过期: 线程1查数据,获取互斥锁,开启新线程

特点: 高可用 性能优

缓存雪崩

原理: 大量数据过期,同时有大量请求同时请求这些过期数据,导致数据库处理不过来,造成宕机

解决方案:分批次给过期数据增加1-5分钟的随即时间过期