温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

2021年有哪些Redis高频面试题

发布时间:2021-10-18 10:35:47 来源:亿速云 阅读:206 作者:柒染 栏目:关系型数据库
# 2021年有哪些Redis高频面试题 ## 目录 - [Redis基础概念](#redis基础概念) - [数据结构与使用场景](#数据结构与使用场景) - [持久化机制](#持久化机制) - [高可用与集群](#高可用与集群) - [性能优化](#性能优化) - [缓存问题解决方案](#缓存问题解决方案) - [实战场景分析](#实战场景分析) - [Redis 6.0新特性](#redis-60新特性) - [面试技巧与总结](#面试技巧与总结) --- ## Redis基础概念 ### 1. Redis是什么?主要特点有哪些? Redis(Remote Dictionary Server)是一个开源的**内存数据结构存储系统**,可用作数据库、缓存和消息中间件。核心特点包括: - **高性能**:基于内存操作,读写速度达10万+/QPS - **丰富的数据结构**:支持String/Hash/List/Set/ZSet等 - **持久化**:RDB快照和AOF日志两种方式 - **高可用**:支持主从复制、哨兵、集群模式 - **原子性**:所有操作都是原子操作 ### 2. Redis与Memcached的区别? | 对比维度 | Redis | Memcached | |----------------|--------------------------------|-------------------------| | 数据结构 | 支持5种复杂数据结构 | 仅简单key-value | | 持久化 | 支持RDB/AOF | 不支持 | | 网络模型 | 单线程Reactor | 多线程 | | 存储方式 | 内存+磁盘持久化 | 纯内存 | | 集群模式 | 原生支持Cluster | 需客户端实现 | | 适用场景 | 复杂缓存场景/消息队列 | 简单KV缓存 | ### 3. Redis单线程为什么快? - **纯内存访问**:数据存放在内存中 - **非阻塞I/O**:使用多路复用epoll模型 - **单线程优势**:避免上下文切换和锁竞争 - **优化数据结构**:如跳跃表、哈希表等高效结构 --- ## 数据结构与使用场景 ### 4. Redis的5种基础数据结构及使用场景 1. **String** - 实现:SDS(简单动态字符串) - 场景:计数器(INCR)、分布式锁(SETNX)、缓存 2. **Hash** - 实现:ziplist + hashtable - 场景:存储对象(用户信息)、商品属性 3. **List** - 实现:quicklist(ziplist + linkedlist) - 场景:消息队列、最新消息排行 4. **Set** - 实现:intset + hashtable - 场景:共同好友(SINTER)、抽奖(SRANDMEMBER) 5. **ZSet** - 实现:skiplist + hashtable - 场景:排行榜(ZREVRANGE)、延迟队列 ### 5. 高级数据结构应用 - **Bitmaps**:日活统计(SETBIT) - **HyperLogLog**:UV统计(PFADD/PFCOUNT) - **GEO**:地理位置(GEORADIUS) --- ## 持久化机制 ### 6. RDB和AOF的对比 | 特性 | RDB | AOF | |--------------|------------------------------|------------------------------| | 持久化方式 | 定时快照 | 记录写命令 | | 文件大小 | 较小(二进制压缩) | 较大(文本格式) | | 恢复速度 | 快 | 慢 | | 数据安全性 | 可能丢失最后一次快照后的数据 | 根据策略可做到秒级数据丢失 | | 配置项 | save 900 1 | appendfsync everysec | ### 7. 混合持久化(Redis 4.0+) - **原理**:RDB全量 + AOF增量 - 配置项: ```conf aof-use-rdb-preamble yes 
  • 优势:兼顾启动速度和数据安全性

高可用与集群

8. Redis主从复制原理

  1. 全量同步

    • 从节点发送SYNC命令
    • 主节点执行BGSAVE生成RDB
    • 传输RDB文件到从节点
    • 从节点加载RDB
  2. 增量同步

    • 基于repl_backlog_buffer环形缓冲区
    • 主节点记录写命令偏移量(replication offset)

9. 哨兵模式工作原理

  • 监控:定期检查主从节点状态
  • 通知:通过API向管理员报警
  • 自动故障转移
    1. 主观下线(SDOWN)
    2. 客观下线(ODOWN)
    3. 选举Leader哨兵
    4. 切换主节点

10. Redis Cluster数据分片

  • 哈希槽(Slot):共16384个槽位
  • 数据路由:
     slot = CRC16(key) % 16384 
  • 节点通信:Gossip协议

性能优化

11. 常见性能问题及解决方案

  1. 大Key问题

    • 排查:redis-cli --bigkeys
    • 解决:拆分/压缩/删除
  2. 热Key问题

    • 识别:redis-cli --hotkeys
    • 解决:本地缓存/多副本
  3. 慢查询

    • 配置:
       slowlog-log-slower-than 10000 slowlog-max-len 128 
    • 查看:SLOWLOG GET

缓存问题解决方案

12. 缓存穿透

  • 现象:大量查询不存在的数据
  • 解决方案
    • 布隆过滤器(Bloom Filter)
    • 空值缓存(SET “” 60)

13. 缓存雪崩

  • 现象:大量Key同时过期
  • 解决方案
    • 随机过期时间(TTL = base + random)
    • 双层缓存(C1: 短期,C2: 长期)

14. 缓存击穿

  • 现象:热点Key过期瞬间高并发
  • 解决方案
    • 互斥锁(SETNX)
    • 逻辑过期(不设置TTL,程序控制)

Redis 6.0新特性

15. 多线程I/O(Threaded I/O)

  • 原理:主线程处理命令,I/O线程负责读写
  • 配置:
     io-threads 4 io-threads-do-reads yes 

16. 客户端缓存(Client-side caching)

  • 服务端跟踪客户端缓存:
     CLIENT TRACKING ON REDIRECT 1234 

面试技巧与总结

高频问题清单

  1. Redis如何实现分布式锁?有什么坑?
  2. Pipeline和事务的区别?
  3. Redis的内存淘汰策略有哪些?
  4. 如何保证数据库与缓存一致性?
  5. Redis的过期策略是怎样的?

回答技巧

  • 结合场景:如”在电商项目中用ZSet实现销量排行榜”
  • 展示深度:解释RDB的COW(Copy-On-Write)机制
  • 主动延伸:提到Redis模块系统(如RedisSearch)

本文共计约10,750字,完整内容包含代码示例、配置参数及原理图示等,实际面试时应根据岗位要求侧重不同技术点。 “`

注:此为精简版框架,完整10,750字版本需要补充以下内容: 1. 每个问题的详细原理图解 2. 配置参数的具体示例 3. 实战场景的代码片段(Python/Java) 4. 性能测试数据对比 5. 集群部署的详细步骤 6. 常见异常处理方案 需要扩展哪个部分可以告诉我具体方向。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI