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源码(重点看事件循环、数据结构)
相关推荐
喜欢吃豆9 分钟前
prompts提示词经典模板
java·服务器·数据库·人工智能·prompt
AI Echoes24 分钟前
LLaMA 常见面试题
数据库·人工智能·python·机器学习·chatgpt
菜就多练吧40 分钟前
Redisson的红锁,分段锁,公平锁,联锁。。。。。。
redis
KEEPMA1 小时前
在线上定位1G日志文件中的异常信息时,我这样做合适吗
java·服务器·数据库
hxung1 小时前
MySQL与Oracle深度对比
数据库·mysql·oracle
gys98951 小时前
去除Mysql表中的空格、回车、换行符和特殊字符
数据库·mysql
SHIPKING3931 小时前
【LangChain少样本提示工程实战】FewShotPromptTemplate原理与应用解析——附运行代码
数据库·python·langchain·llm·fewshotprompt
今天不学习明天变拉吉2 小时前
分页查询列表每页1000条的优化
java·数据库·mysql·性能优化
huangsu_1232 小时前
java+postgresql+swagger-单表批量和循环insert、delete操作(八)
java·开发语言·数据库·postgresql
superonion06202 小时前
【DB2】备份失败SQL1762N
数据库