• 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 分区
  • 相关阅读:
    微信小程序学习心得
    微信小程序分类的实现
    Vue实例中封装api接口的思路 在页面中用async,await调用方法请求
    Vue中封装axios组件实例
    使用creata-react-app脚手架创建react项目时非常慢的问题
    Javascript的对象
    vue中上拉加载数据的实现
    Vue中键盘事件
    vant学习网址
    字符串,字典,数组写入本地文件和从本地文件读取
  • 原文地址:https://www.cnblogs.com/huangwenjie/p/14480560.html
Copyright © 2020-2023  润新知