当前位置: 首页 > 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.xdnf.cn/news/1121563.html

相关文章:

  • wpf 实现窗口点击关闭按钮时 ​​隐藏​​ 而不是真正关闭,并且只有当 ​​父窗口关闭时才真正退出​​ 、父子窗口顺序控制与资源安全释放​
  • NAT原理与实验指南:网络地址转换技术解析与实践
  • ubuntu之坑(十五)——设备树
  • 【论文阅读】Thinkless: LLM Learns When to Think
  • .net天擎分钟降水数据统计
  • 【飞牛云fnOS】告别数据孤岛:飞牛云fnOS私人资料管家
  • React 第六十九节 Router中renderMatches的使用详解及注意事项
  • JMeter 连接与配置 ClickHouse 数据库
  • Mysql用户管理及在windows下安装Mysql5.7(压缩包方式)远程连接云服务器(linux)上的Mysql数据库
  • 【一维 前缀和+差分】
  • ether.js—6—contractFactory以部署ERC20代币标准为例子
  • CSS手写题
  • 详解彩信 SMIL规范
  • Leaflet面试题及答案(81-100)
  • 代码随想录day34dp2
  • ARMv8.1原子操作指令(ll_sc/lse)
  • 苍穹外卖学习指南(java的一个项目)(老师能运行,但你不行,看这里!!)
  • python的微竞网咖管理系统
  • UI前端与数字孪生结合实践探索:智慧物流的仓储自动化管理系统
  • Java文件操作
  • Reactor 模式详解
  • 【Echarts】 电影票房汇总实时数据横向柱状图比图
  • ubuntu 22.04 anaconda comfyui安装
  • libimagequant windows 编译
  • 云手机常见问题解析:解决延迟、掉线等困扰
  • 机器学习中的朴素贝叶斯(Naive Bayes)模型
  • 新型eSIM攻击技术可克隆用户资料并劫持手机身份
  • Android 16系统源码_窗口动画(一)窗口过渡动画层级图分析
  • 在 Azure Linux 上安装 RustFS
  • 如何保护文件传输安全?文件传输加密