有关redis的缓存穿透与缓存击穿问题

65 阅读1分钟

缓存穿透简单点说就是大量请求的key根本不存在于缓存中,导致请求直接到了数据库上,没有经过缓存。 总结一下就是:1、缓存层不命中, 2、存储层不命中,不将空结果存入缓存, 3、返回空结果给客户端。 解决方法: 1、缓存无效key:如果缓存和数据库都查不到某个key就写一个到redis中并设置过期时间为1分钟,但是这种情况只能应对key变化不频繁的前提,如果黑客恶意攻击每次都构建不同的key,会导致我们的内存缓存大量无效的key,这种方法显然不能从根本上解决问题。 2、使用布隆过滤器判断key是否合法

缓存击穿就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了,大量的请求给数据库带来巨大的冲击。 解决方法: 1、使用互斥锁 2、设置逻辑过期