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;
  • 构建了多种通信模式,进一步提升性能
  • 进行持久化的时候会以子进程的方式执行,主进程不阻塞

img

涉及知识点:

  • 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 分区
posted @ 2021-03-04 15:30  流星<。)#)))≦  阅读(121)  评论(0编辑  收藏  举报