20210304. 8. Redis 大厂面试汇总 - 拉勾教育
Redis 大厂面试汇总
缓存雪崩、缓存穿透、缓存击穿
- 答题思路:
- 三者的概念,发生场景、解决方案
- 三者的区别和影响
- 涉及知识点:Redis 第七章:缓存问题——缓存穿透、缓存雪崩、缓存击穿
- 穿透:不存在的 key
- 雪崩:大量的 key 失效
- 击穿:一个 key 或一些 key 热点 key
大 Key,热点 Key 的处理
Hot Key
答题思路:
- hot key 的概念,场景,问题
- hot key 的发现
- hot key 的处理
涉及知识点:Redis 第七章:缓存问题——hot key
Big Key
答题思路:
-
big key 的概念、场景,影响
String > 10k ,list 大于 5000 个
-
big key 的发现
-
big key 的处理
涉及知识点:Redis 第七章:缓存问题——big key
数据库一致,缓存失效,数据并发竞争
数据库一致
答题思路:
- Catch Aside Pattern
- 数据源不一致
- 场景的适用性(互联网)
- 保证最终一致,一致的时间处理
涉及知识点:
- Redis 第一章:Cache Aside Pattern
- Redis 第七章:数据不一致
缓存失效
答题思路:
- 缓存失效带来的问题:缓存穿透、缓存雪崩、缓存击穿(高并发)
- 会让数据库压力过大而宕机
- Redis 的缓存过期策略: LRU
- Redis 设置的
expiretime
, TTL
缓存失效的处理:
- Redis 做 DB 时,不能失效 保证数据的完整性,数据一致问题,定时任务,在 DB 变化后,更新缓存
- 可以失效但不穿 DB,失效后读取本地缓存或服务熔断
- 异步更新 DB,数据时时同步
涉及知识点:
- Redis 第七章:缓存穿透、缓存雪崩、缓存击穿
- Redis 第二章:缓存过期和淘汰策略
- Redis 第七章:缓存更新策略
数据并发竞争
答题思路:
- 数据并发竞争的概念、场景
- 数据并发竞争的影响
解决方案:
- 将并发串行化:分布式锁 + 时间戳、利用队列
- 使用 CAS :秒杀
涉及知识点:
- Redis 第七章:数据并发竞争
- Redis 第七章:乐观锁
热点数据和冷数据是什么
答题思路:
- 热数据:hot key 位于 Redis 中,命中率尽量高
- 冷数据:不经常访问的数据,位于 DB 中
- 冷热的交换:
maxmemory
+allkeys lru
- 交换比例:热 20 万、冷 200 万
Redis 作为 DB 时,冷数据不能驱逐,保证数据的完整性
涉及知识点:
- Redis 第七章:hot key
- Redis 第二章:缓存过期和淘汰策略
单线程的 Redis 为什么这么快
答题思路:
- Redis 在内存中操作,持久化只是数据的备份,正常情况下内存和硬盘不会频繁 swap
- 多机主从,集群数据扩展
maxmemory
的设置 + 淘汰策略- 数据结构简单,有压缩处理,是专门设计的
- 单线程没有锁,没有多线程的切换和调度,不会死锁,没有性能消耗
- 使用 I/O 多路复用模型,非阻塞 IO;
- 构建了多种通信模式,进一步提升性能
- 进行持久化的时候会以子进程的方式执行,主进程不阻塞
涉及知识点:
- Redis 第二章:底层数据结构
- Redis 第二章:缓存过期和淘汰策略
- Redis 第三章:通信协议
- Redis 第三章:事件处理机制
- Redis 第四章:RDB 和 AOF
- Redis 第六章:主从、集群
Redis 的过期策略以及内存淘汰机制
答题思路:
- 为什么要过期
- 什么情况下不能过期
- 如何设置过期
- expires 原理
- 如何选择缓存淘汰策略
涉及知识点:
- Redis第二章:缓存过期和淘汰策略
Redis 为什么是单线程的,优点是什么
答题思路:
- Redis 采用单线程多进程集群方案
- Redis 是基于内存的操作, CPU 不是 Redis 的瓶颈
- 瓶颈最有可能是机器内存的大小或者网络带宽
- 单线程的设计是最简单的
- 但是对多核 CPU 利用率不够,所以 Redis 6 采用多线程
单线程优点:
- 代码更清晰,处理逻辑更简单 不用去考虑各种锁的问题,
- 不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗
- 不存在多进程或者多线程导致的切换而消耗 CPU
涉及知识点:
- Redis 第二章:缓存过期和淘汰策略
- Redis 第三章:通信协议
- Redis 第三章:事件处理机制
如何解决 Redis 的并发竞争 key 问题
- Redis key的设计,尽量不竞争
- 必须竞争:秒杀、分布式锁
- 同数据并发竞争
Redis 分布式锁问题
答题思路:
- 分布式锁的概念,应用场景
- Redis 的实现方式
- 分布式锁的本质分析
- Redis 、ZooKeeper、etcd 三者的对比和应用场景
- Redisson 的使用
涉及知识点:Redis 第七章:分布式锁
有没有尝试进行多机 Redis 的部署?如何保证数据一致的?
答题思路:
- Redis 多机部署方案:Redis 主从+哨兵、Codis 集群、Redis Cluster
- 多机: 高可用、高扩展、高性能
- 三者的区别,适用场景
- 数据一致性指的是主从的数据一致性
- Redis 是 AP 模型,主从同步有时延。所以不能保证主从数据的时时一致性,只能保证数据最终一致性
保证数据一致性方案:
- 忽略
- 如果业务能够允许短时间不同步就忽略,比如:搜索,消息,帖子,职位
- 强制读主库,从库只做备份使用
- 使用一个高可用主库提供数据库服务
- 读和写都落到主库上
- 采用缓存来提升系统读性能
- 选择性读主
- 写主库时将哪个库,哪个表,哪个主键三个信息拼装一个 key 设置到 cache 里
- 读时先在 cache 中查找:
- cache 里有这个 key ,说明 1s 内刚发生过写请求,数据库主从同步可能还没有完成,此时就应该去主库查询
- cache 里没有这个 key ,说明最近没有发生过写请求,此时就可以去从库查询
涉及知识点:
- Redis 第六章:主从复制、哨兵模式、 proxy 端分区、官方 cluster 分区