Redis

一、Redis为何成为面试必考题?

Redis 作为高性能内存数据库,在互联网公司使用率高达90%(数据来源:DB-Engines 2023)。掌握Redis已成为中高级开发者的硬性要求,面试必问的三大原因:

  1. 性能标杆:单机10万+ QPS
  2. 架构核心:缓存、分布式锁、限流等关键场景
  3. 设计典范:单线程模型、高效数据结构的经典实现

二、Redis核心五重奏(附思维导图)

1. 数据结构与底层实现

数据类型 底层结构 典型场景 高频考点
String SDS动态字符串 计数器、分布式锁 SDS vs C字符串优势
Hash 哈希表+ziplist 对象存储(用户信息) ziplist压缩条件
List quicklist 消息队列、最新消息 快速链表实现原理
Set hashtable+intset 抽奖、共同关注 集合运算时间复杂度
ZSet 跳表+哈希表 排行榜、延迟队列 跳表查询效率为什么是O(logN)

经典面试题:

bash 复制代码
# 用Redis实现延迟队列(ZSET示例)
ZADD delay_queue 1640995200 "task1"
ZRANGEBYSCORE delay_queue 0 <current_timestamp> WITHSCORES

2. 持久化机制对决

RDB vs AOF对比表:

维度 RDB快照 AOF日志
数据完整性 可能丢失分钟级数据 最多丢失1秒数据
恢复速度
文件体积 小(二进制压缩) 大(文本日志)
写性能影响 高(fork子进程) 低(追加写入)

混合持久化配置:

properties 复制代码
# redis.conf
aof-use-rdb-preamble yes  # 开启混合模式

3. 高可用三剑客

架构对比:

  • 主从复制:数据备份,读写分离
  • 哨兵模式:自动故障转移,最少3节点
  • Cluster集群:数据分片(16384 slots),去中心化

脑裂问题解决方案:

properties 复制代码
min-slaves-to-write 1     # 至少1个从节点同步
min-slaves-max-lag 10    # 数据复制延迟不超过10秒

4. 缓存三大经典问题

问题类型 现象 解决方案
缓存雪崩 大量key同时过期 随机过期时间 + 永不过期热点数据
缓存穿透 查询不存在的数据 布隆过滤器 + 空值缓存
缓存击穿 热点key过期后高并发查询 互斥锁 + 逻辑过期时间

布隆过滤器实现示例:

java 复制代码
// 使用Redisson客户端
RBloomFilter<String> bloomFilter = redisson.getBloomFilter("userFilter");
bloomFilter.tryInit(100000L, 0.03);  // 10万数据,3%误判率
bloomFilter.add("user1");
if(bloomFilter.contains("user2")) { /* 可能存在 */ }

5. 内存管理机制

  • 淘汰策略:8种策略(volatile-lru/allkeys-lfu等)
  • 内存优化:使用Hash类型存储对象比String节省**50%**内存
  • BigKey检测redis-cli --bigkeys 分析

三、Redis 6.x 新特性(加分项)

  1. 多线程IO:网络IO处理多线程(执行命令仍单线程)
  2. 客户端缓存:Client-side caching(Tracking机制)
  3. ACL权限控制:精细化权限管理
  4. SSL支持:增强网络安全性

四、高频面试题Top10(附答案模板)

  1. Redis为什么快?(内存操作/IO多路复用/单线程避免竞争)
  2. 如何保证缓存与数据库双写一致性?(延迟双删/订阅binlog)
  3. Redis事务为什么不支持回滚?(保持简单高效的设计哲学)
  4. 怎么用Redis实现分布式锁?(SETNX + Lua脚本)
  5. Pipeline有什么作用?(批量命令减少网络往返时间)
  6. 什么是RedLock算法?(多节点获取锁机制)
  7. 如何实现附近的人功能?(GEO模块 + GEOHASH)
  8. 大Key删除有什么风险?(阻塞线程,渐进式删除方案)
  9. Redis的哈希槽是什么?(Cluster分片单位,16384个)
  10. 怎么实现异步队列?(List阻塞弹出 + 多消费者)

五、实战案例:电商系统Redis应用

  1. 秒杀系统:Lua脚本实现库存原子性扣减
  2. 会话管理:Hash存储用户登录态
  3. 商品详情页缓存:多级缓存架构(本地缓存+Redis)
  4. 排行榜:ZSET实时更新热销商品

六、学习路线推荐

  1. 入门:《Redis设计与实现》(黄健宏著)
  2. 进阶:Redis官方文档(https://redis.io
  3. 实战:GitHub开源项目(如秒杀系统实现)
  4. 源码:阅读Redis 6.x源码(重点看事件循环、数据结构)
相关推荐
雾时之林25 分钟前
Linux--软件管理、源码包安装
linux·服务器·数据库
thesky1234561 小时前
智能体面试准备(二十六):Agent 成本工程——模型路由、缓存、预算控制与大小模型分工
缓存·llmops·智能体·模型路由·成本工程·预算控制·小模型分工
老纪的技术唠嗑局2 小时前
超级干货分享:中小企业使用 OceanBase 实践经验汇总
数据库
CLOUD ACE2 小时前
谷歌云代理|零售商Target 如何利用 Spanner Graph 提升零售发现体验并将数据库维护成本降低 50%
数据库·零售
AI大模型-小雄2 小时前
Codex写分页接口为什么越翻越慢?用Cursor Pagination解决重复与漏数据
大数据·数据库·elasticsearch·搜索引擎·chatgpt·后端开发·codex
少晓年3 小时前
从 MySQL 迁移到人大金仓 KingbaseES:完整指南与实践
数据库·mysql
SelectDB4 小时前
Apache Doris AI RAG 实战:从基础 RAG 到知识图谱增强的技术能力与选型
数据库
SelectDB4 小时前
电商企业 PostgreSQL 迁移 Apache Doris:80TB 分析数据统一平台技术能力与实践
数据库
SelectDB4 小时前
阶跃星辰 Agent 可观测:Apache Doris / SelectDB 的技术能力与实践
数据库
SelectDB4 小时前
ApacheDoris Iceberg V3 湖仓 DML:Apache Doris / SelectDB 的技术能力与实践
数据库