• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

雕刻自我

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

redis学习笔记-缓存雪崩、缓存穿透、缓存击穿

一、缓存穿透

  定义:同一时刻,大量的并发请求数据库中不存在的信息,由于不存在所以不会命中缓存而是直接查询数据库

  解决方案:

    1、将空数据存入缓存:不是null而是空值,空值时间不可以太长,因为后面可能存入值而导致和缓存不一致

    2、布隆过滤器:用于检索一个元素是否在一个集合中,优点是空间效率和查询时间比较好,缺点是有一定的误识别率和删除困难

    3、逻辑校验:校验入参,对于不正确的入参直接返回,不请求数据库;比如id<0、分页查询的参数大小做限制等

二、缓存击穿

  定义:热点key在某个时间点过期的时候恰好有大量的并发请求出现,从而大量请求直接调用到数据库

  解决方案:

    1、自动更新:请求时查看剩余时间,如果小于某个阈值则更新数据;缺点:如果阈值内恰好没有请求导致缓存失效,还有风险发生击穿

    2、定时更新:使用定时任务查询快要过期的key,更新内容;缺点耗费服务器性能

    3、消息队列:数据存入缓存的同时将key存入延迟队列中,设定延迟时间为缓存有效期之前,到时间自动刷新缓存数据;缺点:实现麻烦

    4、程序加锁:使用高性能的锁保证程序串行请求数据,如读写锁等

三、缓存雪崩

  定义:缓存中数据大批量到过期时间,大量的查询同时打到数据库导致数据库宕机;可能是在使用定时任务刷新缓存数据时大批量的key都设定了相同的过期时间

    由于存在大量的请求,即使是重启数据库又会被大量请求攻击导致宕机;限流:只保证一部分数据可以请求;降级处理:给另一部分请求返回默认值从而减小数据库压力

  解决方案:

    1、设置随机过期时间:在固定的过期时间的基础上加一个小范围的随机数

    2、永久有效:根据实际情况将一些数据设置为永久有效  

posted on 2020-09-27 23:39  雕刻自我  阅读(132)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3