黑马点评的缓存穿透
什么是缓存穿透
客户端请求一个「数据库里根本不存在」的数据,导致请求既查不到 Redis 缓存、又查不到数据库,每次请求都会直接穿透缓存打到数据库,疯狂消耗数据库性能。
解决方法:
1,**缓存空对象:**在第一次未命中时,将该请求对象的value设置为null存储在redis中,并且设置TTL,这样在短期再次请求该数据时则不会出现缓存穿透。
优点:实现简单,维护方便
缺点::Redis 会存一堆「空值 key」,占用少量内存(可忽略,设置短过期即可)。
2, 布隆过滤器【进阶方案,高并发场景用】
在 Redis / 缓存前加一层「布隆过滤器」,里面提前存入所有数据库中存在的 ID,请求过来先过过滤器:
✅ 过滤器里有这个 ID → 放行,走正常缓存流程;
❌ 过滤器里没有这个 ID → 直接返回空,连 Redis 都不查。
✅ 优点:性能极致,拦截效率 100%;❌ 缺点:实现稍复杂,适合百万 / 千万级数据的高并发项目,新手前期不用学。
客户端请求一个「数据库里根本不存在」的数据,导致请求既查不到 Redis 缓存、又查不到数据库,每次请求都会直接穿透缓存打到数据库,疯狂消耗数据库性能。
解决方法:
1,**缓存空对象:**在第一次未命中时,将该请求对象的value设置为null存储在redis中,并且设置TTL,这样在短期再次请求该数据时则不会出现缓存穿透。
优点:实现简单,维护方便
缺点::Redis 会存一堆「空值 key」,占用少量内存(可忽略,设置短过期即可)。
2, 布隆过滤器【进阶方案,高并发场景用】
在 Redis / 缓存前加一层「布隆过滤器」,里面提前存入所有数据库中存在的 ID,请求过来先过过滤器:
✅ 过滤器里有这个 ID → 放行,走正常缓存流程;
❌ 过滤器里没有这个 ID → 直接返回空,连 Redis 都不查。
✅ 优点:性能极致,拦截效率 100%;❌ 缺点:实现稍复杂,适合百万 / 千万级数据的高并发项目,新手前期不用学。
全部评论
相关推荐
点赞 评论 收藏
分享
不知道怎么取名字_:hr挂6次,这种肯定是要复盘了,你最后是拿到哪家的offer了?
点赞 评论 收藏
分享
查看7道真题和解析
