Redis拷打第一讲

题1:讲讲缓存穿透以及解决方案

概念 :

缓存穿透是指查询一个一定不存在的Key,导致缓存未命中,每次请求都打到数据库,可能压垮数据库。

解决方案:

  1. 缓存空值
    • 第一次查询数据库发现不存在时,在缓存中存空值,并设置过期时间
    • 防止重复查询,减轻数据库压力
  2. 布隆过滤器
    • 插入Key前先通过布隆过滤器判断Key是否可能存在
    • 不存在则直接返回,不访问数据库

题2:讲讲布隆过滤器是什么,解决了什么问题

解决问题:

  • 防止缓存穿透,拦截不存在Key的请求

底层原理:

  1. 初始化一个大的二进制数组(全0)
  2. 插入Key时,经过多次哈希(例如3次),每次对数组长度取余 → 得到数组下标
  3. 将三个下标对应位置置1
  4. 查询Key时,同样哈希,检查三个位置:
    • 都为1 → Key可能存在
    • 任意为0 → Key一定不存在

误判原因:

  • 不同key哈希到数组同一位置,导致未存key被误判为存在

误判率控制:

  • 调整数组长度和哈希函数数量
  • 一般设置 ≤5%,可满足大多数项目需求

题3:讲讲缓存击穿是什么,与穿透的区别以及解决方案

概念:

  • Key存在,但刚好过期时,高并发访问同一Key,缓存未命中,大量请求打数据库,可能压垮数据库

区别于缓存穿透 :

穿透 :查询一个一定不存在的Key

击穿 :查询存在的Key,但恰好过期

解决方案:

  1. 互斥锁 / 分布式锁
    • 第一个访问过期Key的线程加锁访问数据库并刷新缓存
    • 其他线程等待或重试,保证数据库压力不被瞬时放大
    • 适用于强一致得场景
  2. 逻辑过期
    • 缓存存入时不设置过期时间
    • 查询时判断是否过期
      • 过期 → 异步线程刷新缓存
      • 当前线程直接返回旧值
    • 适用于高并发场景,但可能返回旧值

题4:讲讲缓存雪崩是什么以及解决方案

概念:

  • 大量Key在同一时间过期,高并发请求同时到来,缓存未命中,大量请求直接打到数据库,可能压垮数据库

解决方案:

  1. TTL随机化
    • 在原有过期时间上随机加几分钟,避免大批Key同时过期
  2. 缓存预热
    • 定时将热点Key提前加载到缓存
    • 避免冷启动阶段请求打数据库
  3. 多级缓存
    • 本地缓存 + Redis分布式缓存 + 数据库
    • 即使Redis部分失效,本地缓存仍可拦截部分请求,降低瞬时压力

相关推荐
java1234_小锋11 小时前
【技术专题】Mysql8 数据库 - Mysql8 数据类型简介
数据库·mysql
知行EDI11 小时前
知行之桥 MaBang 端口使用指南——Create Order 订单创建篇
java·服务器·数据库
成旭先生12 小时前
【2026】企业信息模糊查询 API 实战:名称、注册号、统一社会信用代码、企业类型与法人一次查全
服务器·数据库·数据服务
JosieBook12 小时前
【数据库】MySQL 实战精通系列 · 第10篇:分库分表与分布式事务实战
数据库·分布式·mysql
写后端的胖头鱼12 小时前
一文详解Cache Aside(旁路缓存模式)
redis·缓存·延迟双删·缓存一致
我叫洋洋13 小时前
Cadence CIS 元器件库合并实战:3000+ 焊盘、156 个符号零冲突并入自有库
数据库·单片机·嵌入式硬件·oracle·电路
AI 编程助手GPT13 小时前
GPT-6 Luna (Batch) 批量处理性能与质量深度评测
数据库·gpt·batch
Web3&Basketball13 小时前
用FastAPI+Redis 复刻常驻Agent
redis·bootstrap·fastapi
quweiie13 小时前
Neo4j Community 安全访问配置总结
数据库·centos·neo4j
code_slave(码畜)13 小时前
微服务架构落地:基础服务 —— 报表服务(中篇:元数据、查询引擎、缓存与权限落地)
spring boot·spring cloud·缓存·微服务·架构