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部分失效,本地缓存仍可拦截部分请求,降低瞬时压力

相关推荐
吴声子夜歌几秒前
MongoDB 8.0——存储
数据库·mongodb
网教盟人才服务平台27 分钟前
Redis Key集中过期引发的流量雪崩实战解析
数据库·redis·缓存
Ivan CloudBay29 分钟前
网站为什么会使用缓存?
服务器·网络·缓存·云服务器
AI大模型-小华30 分钟前
ChatGPT充值后Codex误改数据库怎么办?用迁移审查避免数据丢失
数据库·chatgpt·codex·chatgpt plus·chatgpt pro·chatgpt充值
吴声子夜歌44 分钟前
MongoDB 8.0——索引
数据库·mongodb
影寂ldy1 小时前
WinForm 完整版分页查询(多条件搜索+页码切换+每页条数切换)
数据库
Linux运维技术栈1 小时前
业务不停机、数据零丢失:Redis / RabbitMQ / Elasticsearch 三大核心中间件升级改造集群无缝平滑迁移
redis·elasticsearch·rabbitmq
_oP_i1 小时前
Another Redis Desktop Manager更新
数据库·redis·缓存
IT小盘1 小时前
08-向量数据库选型-Chroma-FAISS-Milvus-pgvector
数据库·人工智能·milvus·faiss
宋浮檀s2 小时前
春秋云境——CVE-2022-28512
数据库·安全·web安全