知识点标签

缓存面试题解析

缓存相关面试题,覆盖读写策略、失效机制、热点保护和工程取舍。

32 道题 6 个岗位 6 个公司

缓存相关面试题

什么场景下会使用分布式缓存?

分布式缓存通常用于高并发、低延迟、读多写少、计算或访问代价高、数据库容易成为瓶颈的场景。面试回答要强调它不是简单替代数据库,而是在业务系统、数据库和外部依赖之间增加一层高速共享存储,用来降低响应时间、削峰、复用热点数据,并配合一致性、过期、降级和容灾策略控制风险。

Redis的List底层实现原理?

Redis List 的底层实现经历过从 ziplist 与 linkedlist 的组合,到 quicklist 统一承载的演进。核心目标不是单纯追求某一种操作最快,而是在两端插入删除、内存占用、缓存友好性和中间位置修改之间做平衡。回答时要讲清:List 是有序、可重复、按插入顺序组织的线性结构,适合队列、栈、简单消息流等场景,但索引访问和中间元素定位不是它的强项。

为什么要用redis?

Redis 的核心价值不是更快的数据库,而是把高频、低延迟、可短期容忍一致性差异的数据放到内存侧处理,从而缩短读写链路、削峰填谷、降低关系型数据库压力,并利用丰富数据结构、原子命令、过期机制和高可用能力支撑缓存、计数、排行榜、限流、会话、队列等典型场景。

Redis 为什么高可用?

Redis 的高可用不是单一能力,而是复制、故障检测、自动切换、分片容灾、持久化、客户端重连和监控治理共同组成的体系。主从复制提升读扩展和副本冗余,哨兵负责发现主节点故障并自动完成主从切换,Cluster 通过分片和多主多从避免单机容量与单点问题,AOF/RDB 持久化降低进程或机器故障后的数据损失。真正回答这道题时,要同时说明 Redis 能恢复服务、能减少数据丢失,但不能承诺在所有极端场景下零丢失,尤其要讲清复制延迟、脑裂和一致性取舍。

为什么Redis的速度这么快?

Redis 快不是单一原因,而是数据结构、内存访问、事件模型、网络处理和工程取舍共同作用的结果。面试回答时不能只说“因为它是内存数据库”或“因为单线程”,更关键的是说明:绝大多数请求走内存,核心命令复杂度低;单线程事件循环减少锁竞争和上下文切换;I/O 多路复用提升并发连接处理能力;协议和数据结构实现轻量;同时 Redis 也通过持久化、复制、集群等机制在速度与可靠性之间做取舍。

集群环境怎么更新本地缓存?

集群环境更新本地缓存的核心是把进程内缓存视为性能优化层,而不是共享事实源。常见方案是数据库作为最终事实源,Redis 作为跨节点共享缓存,本地缓存作为单机热点加速层;数据变更后通过可靠事件广播删除各实例本地缓存,并用 TTL、版本号和补偿机制兜底。

缓存的 key 是什么?

缓存的 key 不是随手拼接的字符串,而是后端系统把业务对象、查询条件、租户环境、版本语义和一致性边界映射到缓存空间的唯一标识。一个好的缓存 key 需要同时解决可定位、可隔离、可失效、可观测、可扩展和可治理的问题,否则很容易出现串数据、删不准、热点集中、基数爆炸和线上排查困难。

热点数据怎么保证redis和db中的一致?

热点数据的 Redis 与数据库一致性,核心不是追求所有场景下绝对强一致,而是先明确业务可接受的一致性等级,再选择缓存模式、写入顺序、失效策略和补偿机制。高频面试答案应围绕 Cache Aside、先更新数据库再删除缓存、删除失败补偿、TTL 兜底、版本号防乱序、binlog/CDC 异步修复、热点保护与强一致场景降级到串行化读写展开。

redis的gossip机制?

Redis Cluster 的 Gossip 机制是集群节点之间交换状态信息的一套去中心化通信机制。每个节点不依赖中心协调者,而是通过定期向其他节点发送 PING、PONG、MEET 等消息,携带自己已知的节点元数据、槽位信息、配置纪元和故障判断结果,使整个集群逐步达成状态收敛,并用于节点发现、拓扑维护、故障疑似与故障确认。

说一下数据库底层数据结构B+数据,为什么用,与二叉平衡树区别 Redis怎么用的?

数据库索引常用 B+ 树,核心原因不是“查找复杂度看起来是 O(log n)”,而是它非常适合磁盘和页式存储:节点扇出高,树高低,单次查询需要的页访问次数少;叶子节点按键有序并通过链表连接,范围查询、排序扫描、分页扫描都很高效。二叉平衡树如 AVL、红黑树更适合内存中的动态查找结构,节点扇出低、树高大、局部性差,如果直接用于磁盘索引会产生大量随机 I/O。

还知道哪些缓存中间件?

缓存中间件不只有 Redis。可以按部署位置和能力分为远程内存缓存、进程内本地缓存、分布式缓存、CDN/HTTP 缓存、数据库内部缓存,以及用于削峰和结果复用的消息缓存、结果缓存。回答这题的关键不是罗列产品名,而是说明 Redis、Memcached、Caffeine、Ehcache、Hazelcast、Ignite、CDN、数据库 Buffer Pool 等分别解决什么问题,以及选型时如何比较数据结构、持久化、一致性、延迟和运维复杂度。

什么是缓存穿透?

什么是缓存穿透?这道腾讯牛客题的关键是围绕“缓存穿透”讲清概念、机制、取舍和边界。缓存穿透指请求查询一个缓存和数据库都不存在的 key,缓存无法命中,每次都会打到数据库。恶意构造不存在参数或大量长尾不存在 key 时,会造成回源 QPS 异常升高。

缓存与数据库如何保证一致性?

缓存与数据库如何保证一致性?这道腾讯牛客题的关键是围绕“缓存与数据库一致性”讲清概念、机制、取舍和边界。缓存和数据库通常很难做到强一致,工程上多采用 Cache Aside 并接受短暂最终一致。常见写法是先更新数据库,提交成功后删除缓存;删除失败要有重试、消息补偿或 binlog/CDC 修正。

redis与mysql如何保持一致的?

redis与mysql如何保持一致的?这道腾讯牛客题的关键是围绕“缓存与数据库一致性”讲清概念、机制、取舍和边界。缓存和数据库通常很难做到强一致,工程上多采用 Cache Aside 并接受短暂最终一致。常见写法是先更新数据库,提交成功后删除缓存;删除失败要有重试、消息补偿或 binlog/CDC 修正。

redis缓存击穿、穿透、雪崩及其解决方法?

redis缓存击穿、穿透、雪崩及其解决方法?这道腾讯牛客题的关键是围绕“缓存异常流量防护”讲清概念、机制、取舍和边界。缓存穿透、击穿和雪崩都是缓存层保护后端数据源时常见的异常流量问题。穿透是请求的数据本身不存在导致反复打到后端;击穿是热点 key 过期瞬间大量请求回源;雪崩是大量 key 同时失效或缓存集群不可用导致整体回源压力暴涨。

Redis 主从复制的原理是什么?

Redis 主从复制的原理是什么?这道腾讯牛客题的关键是围绕“Redis 主从复制原理”讲清概念、机制、取舍和边界。Redis 主从复制通过从节点向主节点发起 PSYNC,同步主节点数据和后续命令流。首次或断点不可用时做全量同步,主节点生成 RDB 发送给从节点;断线重连且 backlog 足够时可做部分重同步。

Redis 的底层数据结构有哪些?跳表是如何实现的?

Redis 的底层数据结构有哪些?跳表是如何实现的?这道腾讯牛客题的关键是围绕“Redis 数据结构与底层编码”讲清概念、机制、取舍和边界。Redis 常用对外数据结构包括 String、List、Hash、Set、ZSet、Bitmap、HyperLogLog、Geo 和 Stream。回答时还要区分对外类型和底层编码,例如 SDS、listpack、quicklist、dict、intset 和 skiplist。