redis基础03-redis缓存使用可能出现的问题及解决方案
1.缓存使用过程中可能遇到的问题
1.1缓存穿透
-
含义: 查询一个一定不存在的数据,缓存和数据库不存在数据。因为缓存不存在,所以每次都会直接去数据库查询,缓存失去了意义。当大量访问这种不存在的数据时,就造成了缓存穿透。
-
解决方案:
-
可以对访问进行过滤,将所有可能的数据key的hashcode存储到BitSet中,判断请求id是否命中,如果没有命中,则说明不存在数据。
-
hutool提供了BoolmFilter封装的工具类,google的Guava工具类也进行了封装
1.2 缓存雪崩
-
含义: 是指缓存在同一时间发生大量过期,而造成查询数据库量增大,可能造成数据库崩溃。
-
解决方案:通过缓存过期时间随机,不要固定为某个时间
1.3 缓存击穿
-
含义: 缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力
-
解决方案:
-
热点数据不过期。这种相对来说性能会比较好,但是缓存数据更新时,多线程情况下其他线程很容易读到旧数据。
-
使用互斥锁。
- 只允许一个线程重建缓存,其他线程等待重建缓存的线程执行完,重新从缓存获取数据。
- 保证了数据的一致性
- 当并发量大的时候容易出现线程池阻塞或死锁的情况
-
参考博客: https://blog.csdn.net/tongkongyu/article/details/124842847
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏