黑马点评的缓存穿透

什么是缓存穿透
客户端请求一个「数据库里根本不存在」的数据,导致请求既查不到 Redis 缓存、又查不到数据库,每次请求都会直接穿透缓存打到数据库,疯狂消耗数据库性能。
解决方法:
1,**缓存空对象:**在第一次未命中时,将该请求对象的value设置为null存储在redis中,并且设置TTL,这样在短期再次请求该数据时则不会出现缓存穿透。
优点:实现简单,维护方便
缺点::Redis 会存一堆「空值 key」,占用少量内存(可忽略,设置短过期即可)。
2, 布隆过滤器【进阶方案,高并发场景用】
在 Redis / 缓存前加一层「布隆过滤器」,里面提前存入所有数据库中存在的 ID,请求过来先过过滤器:
✅ 过滤器里有这个 ID → 放行,走正常缓存流程;
❌ 过滤器里没有这个 ID → 直接返回空,连 Redis 都不查。

✅ 优点:性能极致,拦截效率 100%;❌ 缺点:实现稍复杂,适合百万 / 千万级数据的高并发项目,新手前期不用学。
全部评论

相关推荐

01-24 01:39
湖南大学 golang
原项目是黑马程序员的java写的黑马点评,很烂大街的一个项目,我自己和一些网友用go重构了一下,适合27届想走后端的同学入门,学习redis和mysql,难度不高,能够帮助大家对后端开发建立基础认识。我是26届,暑期和秋招期间凭这个拿到了几个大厂offer,也用go面试拿到了java(美团)的offer,字节和腾讯的面试也收到挺多。欢迎小伙伴们来一起学习交流,项目目前已有70+ star,也欢迎贡献代码。可以参考我简历上的写法:小众点评 - 基于Hertz框架的点评网站- 该项目基于 Golang 技术栈,使用 Hertz + hz、Thrift、GORM、Mysql 和 Redis 从零构建了一个点评网站的后端服务,涵盖了好友关注、缓存管理、优惠券秒杀、消息推送和地理位置搜索等核心功能。- 基于 Thrift 定义服务接口,通过 hz 工具自动化生成框架代码。在缓存管理方面,通过 Redis 实现缓存穿透拦截、雪崩预防及击穿保护,提高了查询效率并降低了数据库压力。在秒杀功能实现中,使用了乐观锁和悲观锁来解决秒杀过程中的超卖问题,同时,借助 Redis 的分布式锁机制解决集群环境下的秒杀超卖问题。- 期间为 Hertz 修复了一个单测中的 bug 且合入了上游仓库;项目由个人发起并与几位网友共同完成,目前在 github 获得了70 star,地址:https://github.com/lhpqaq/xzdp-go
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务