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源码(重点看事件循环、数据结构)
相关推荐
武子康1 小时前
Java-82 深入浅出 MySQL 内部架构:服务层、存储引擎与文件系统全覆盖
java·开发语言·数据库·学习·mysql·spring·微服务
vdoi3 小时前
【Mysql】 Mysql zip解压版 Win11 安装备忘
数据库·mysql
TDengine (老段)4 小时前
TDengine 转化类函数 TO_CHAR 用户手册
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
程序员编程指南4 小时前
Qt 与 SQLite 嵌入式数据库开发
c语言·数据库·c++·qt
fht15 小时前
SQLite
数据库·sqlite
float_六七5 小时前
MySQL索引背后的B+树奥秘
数据库·b树·mysql
~央千澈~5 小时前
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
数据库·mongodb
Java初学者小白6 小时前
秋招Day18 - MyBatis - 基础
java·数据库·mybatis
ALLSectorSorft7 小时前
教务管理系统学排课教务系统模块设计
数据库·sql·oracle
小云数据库服务专线7 小时前
GaussDB 数据库架构师(八) 等待事件概述-1
数据库·数据库架构·gaussdb