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

posted @   PerfectLi  阅读(99)  评论(0编辑  收藏  举报
编辑推荐:
· 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的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示