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源码(重点看事件循环、数据结构)
相关推荐
百度智能云技术站42 分钟前
Redis 数据恢复的月光宝盒,闪回到任意指定时间
数据库·redis
~央千澈~1 小时前
评论功能开发全解析:从数据库设计到多语言实现-优雅草卓伊凡
java·前端·数据库
灰小猿1 小时前
分布式项目保证消息幂等性的常见策略
java·redis·分布式·高并发·springcloud
星辰离彬2 小时前
【线上故障排查】系统缓存雪崩故障排查与解决全流程解析
java·spring boot·后端·程序人生·缓存·面试
茶本无香2 小时前
数据库查询性能优化:深入理解与应用物化视图
数据库·性能优化·查询·物化视图
2501_915373882 小时前
neo4j删除所有数据
数据库·neo4j
java-zh2 小时前
redis五种数据结构详解(java实现对应的案例)
java·数据结构·redis
静心观复2 小时前
DNS缓存
网络·缓存
TDengine (老段)2 小时前
TDengine 运维——巡检工具(安装工具)
大数据·运维·数据库·物联网·时序数据库·tdengine·涛思数据
fruge3 小时前
ubuntu 22.04 编译安装nignx 报错 openssl 问题
数据库·ubuntu·postgresql