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源码(重点看事件循环、数据结构)
相关推荐
敲码图一乐29 分钟前
流量安全——基于Sentinel实现限流,熔断,降级
java·开发语言·数据库
何故染尘優1 小时前
Redis 如何配置 Key 的过期时间?它的实现原理?
数据库·redis·缓存
落日漫游3 小时前
MySQL常用命令全攻略
数据库·sql·oracle
野熊佩骑6 小时前
CentOS7二进制安装包方式部署K8S集群之ETCD集群部署
运维·数据库·云原生·容器·kubernetes·centos·etcd
野生技术架构师7 小时前
聊聊五种 Redis 部署模式
数据库·redis·缓存
IndulgeCui7 小时前
【金仓数据库产品体验官】KES-ORACLE兼容模式再体验之FLASHBACK
数据库
zxsz_com_cn8 小时前
钢铁厂设备健康监测系统:AIoT技术驱动的智慧运维革命
数据库
chirrupy_hamal10 小时前
PostgreSQL 流复制参数 - synchronous_standby_names
数据库·postgresql
TiAmo zhang11 小时前
什么是SQL Server 2019?
数据库·sqlserver
问道飞鱼11 小时前
【数据库知识】TxSQL 主从数据库同步底层原理深度解析
网络·数据库·半同步复制·txsql