三座大山分别是缓存穿透,缓存击穿,缓存雪崩
缓存穿透:查询参数是无效的key,这个key在redis没有,然后取数据库查也查不到,导致无用查询。解决方法有两个 1是value设置成null。2是使用布隆过滤器,布隆过滤器可以看出一个数组,然后我们对key进行多次不同hash运算,然后对长度取模,对应位置标记成1,下次有key来的时候先判断这个布隆过滤器对应的下标是不是都是1,如果不是就是没有的key。
缓存击穿:热点key失效了,然后突然有很高的并发来查询这个key,导致很多查询跑到数据库去。解决方法是 对key进行加锁,一次只能有一个线程去数据库查,查完后在设置到redis力,这里面可以用双重检查进行优化,当然这个锁可能得用到分布式锁。
缓存雪崩:在一个时间段key集体失效,导致大量查询跑到数据库。解决方案是每个key设置不同的过期时间,