当前位置: 首页 > news >正文

redis面试高频问题汇总(一)

缓存面试高频问题汇总

在后端、分布式系统面试中,缓存相关问题频繁出现,核心围绕缓存的原理、问题解决、性能优化等。以下是高频考点整理:

一、基础概念类

1. 什么是缓存?为什么要用缓存?

  • 缓存是数据交换的缓冲区,临时存储高频访问数据,减少对底层数据源(如数据库)的直接访问。
  • 作用:降低延迟(内存读写比磁盘快)、减轻数据库压力、提高系统吞吐量。
    2. 常见的缓存介质有哪些?各有什么特点?
  • 内存缓存(如Redis、Memcached):速度快,适合高频访问数据,但数据易失(需持久化)。
  • 本地缓存(如Caffeine、Guava):进程内缓存,无网络开销,但分布式环境下一致性难保证。
  • 磁盘缓存(如浏览器缓存、CDN):容量大、持久化,但速度较慢。
    3. 缓存更新策略有哪些?各适用于什么场景?
  • Cache Aside(旁路缓存):先更数据库,再删缓存(避免脏读),适用于大多数场景。
  • Write Through(写透):更新缓存同时同步更新数据库,一致性高但性能略低,适合读少写多场景。
  • Write Back(写回):先更缓存,异步批量更新数据库,性能高但有数据丢失风险,适合高并发写场景(如内存数据库)。

二、缓存问题与解决方案类

  1. 缓存穿透、击穿、雪崩的区别与解决?(核心考点)
  • 缓存穿透:请求数据在缓存和数据库都不存在,攻击数据库。
    解决:缓存空值、布隆过滤器、接口参数校验。
  • 缓存击穿:热点数据缓存失效,大量并发请求穿透到数据库。
    解决:互斥锁(分布式锁)、热点数据永不过期、异步更新缓存。
  • 缓存雪崩:大量缓存同时失效或缓存服务宕机,导致请求全量压向数据库。
    解决:过期时间随机化、缓存集群(主从+哨兵)、熔断降级、多级缓存。

2. 缓存一致性问题如何解决?

  • 核心矛盾:缓存与数据库数据不一致(如更新数据库后未更新缓存)。
  • 方案:
  • 优先使用删除缓存而非更新缓存(避免并发更新冲突)。
  • 分布式场景下加锁(如Redis分布式锁)保证操作原子性。
  • 对强一致性需求场景,可引入消息队列异步同步缓存。
    3. 缓存和数据库双写不一致的原因及解决?
  • 原因:并发读写时,更新数据库和缓存的顺序差异导致数据偏差(如A更新数据库后,B更新缓存覆盖了正确值)。
  • 解决:更新数据库后延迟删缓存(避免脏读)、加分布式锁确保单线程更新、使用Canal等工具监听binlog同步缓存。

三、Redis专项类

1. Redis为什么快?

  • 基于内存操作,单线程模型避免线程切换开销,I/O多路复用(epoll)处理高并发连接,数据结构优化(如跳表、压缩列表)。
    2. Redis的过期策略和内存淘汰机制有什么区别?
  • 过期策略:定期删除(每隔一段时间扫描过期key)+ 惰性删除(访问时才检查过期),避免过期key占用内存。
  • 内存淘汰机制:当内存达到maxmemory时,删除部分数据的策略(如LRU最近最少使用、LFU最近最不频繁使用、随机删除等)。
    3. Redis分布式锁的实现原理?如何避免死锁?
  • 原理:通过 SET key value NX EX 命令(原子性)获取锁,释放锁时用Lua脚本删除(避免误删他人锁)。
  • 防死锁:设置锁过期时间、加锁时记录线程标识、定时续期(如Redisson的watch dog机制)。

四、性能优化类

1. 如何设计一个高可用的缓存系统?

  • 多级缓存:本地缓存 + 分布式缓存(如先查Caffeine,再查Redis)。
  • 缓存集群:主从复制(读写分离)、哨兵/集群模式(容灾)。
  • 监控与告警:缓存命中率、内存使用率、响应时间等指标监控,异常时自动扩容或降级。
    2. 缓存命中率低怎么办?
  • 分析原因:缓存粒度不合理(过大/过小)、过期时间设置不当、热点数据未缓存。
  • 优化:调整缓存粒度(如缓存用户基本信息而非全量数据)、延长高频数据过期时间、预热热点数据。
    3. 本地缓存和分布式缓存如何配合使用?
  • 本地缓存存超高频且变化少的数据(如配置信息),减少分布式缓存访问压力。
  • 分布式缓存存跨服务共享数据(如用户会话),保证分布式一致性。
  • 注意:本地缓存需避免数据 stale(可加过期时间或主动刷新)。

五、场景设计类

1. 设计一个秒杀系统的缓存方案?

  • 核心:防止缓存雪崩(商品库存缓存过期随机化)、防击穿(热点商品锁+预加载)、限流削峰(Redis+Lua脚本原子扣减库存)。
    2. 如何用缓存解决数据库读写分离的延迟问题?
  • 读请求优先查缓存,缓存未命中时:非热点数据查从库,热点数据查主库(避免从库延迟导致脏读),并更新缓存。

总结

缓存问题的核心是**“平衡性能、一致性、可用性”**,需结合业务场景(如读写频率、数据一致性要求)选择策略。面试中需不仅能描述概念,还要能分析问题根源,并给出具体解决方案(如代码思路、工具选型)。

http://www.lryc.cn/news/588226.html

相关文章:

  • .net天擎分钟降水数据统计
  • 北京饮马河科技公司 Java 实习面经
  • 【数据结构】树(堆)·上
  • 【人工智能】通过 Dify 构建智能助手
  • sfe_py的应力云图计算与显示step by step
  • 夏令营集训7月14日模拟赛④
  • 7.14 Java|搞清楚String 和StringBuilder
  • 【HarmonyOS】元服务入门详解 (一)
  • Java学习————————ThreadLocal
  • 九、官方人格提示词汇总(中-2)
  • 【笔记】chrome 无法打开特定协议或访问特定协议时卡死
  • 计算机基础:小端字节序
  • muduo面试准备
  • 算法:投票法
  • Debezium日常分享系列之:Debezium 3.2.0.Final发布
  • 观察应用宝进程的自启动行为
  • JAVA经典单例模式
  • 分布式系统中设计临时节点授权的自动化安全审计
  • 生信技能74 - WGS插入片段长度分布数据提取与绘图
  • Vue3 学习教程,从入门到精通,Vue 3 表单控件绑定详解与案例(7)
  • Linux连接跟踪Conntrack:原理、应用与内核实现
  • 分布式一致性协议
  • 零基础 “入坑” Java--- 十一、多态
  • 详解同步、异步、阻塞、非阻塞
  • 12.4 Hinton与Jeff Dean突破之作:稀疏门控MoE如何用1%计算量训练万亿参数模型?
  • UM680A模块接地与散热和封装推荐设计
  • MIPI DSI(三) MIPI DSI 物理层和 D-PHY
  • 2D和3D激光slam的点云去运动畸变
  • SLAM 前端
  • Doll靶机渗透