Ref: https://pdai.tech/md/db/nosql-redis/db-redis-z-mianshi.html

常规问题

  • 什么是 redis,为什么要使用它
  • redis 一般有哪些使用场景
  • redis 为什么快

    数据类型和数据结构

  • redis 有哪些数据类型

  • redis 数据类型有哪些命令
  • 谈谈 redis 的对象机制(redisObject)
  • redis 数据类型有哪些底层数据结构
  • 为什么要设计 sds?
  • 一个字符串类型的值能存储最大容量是多少?512M
  • 为什么会设计 Stream
  • Stream 用在什么样场景
  • 消息 ID 的设计是否考虑了时间回拨的问题

    持久化和内存

  • Redis 的持久化机制是什么?各自的优缺点?一般怎么用?

  • Redis 过期键的删除策略有哪些
  • Redis 内存淘汰算法有哪些
  • Redis 的内存用完了会发生什么? 如果达到设置的上限,Redis 的写命令会返回错误信息(但是读命令还可以正常返回。)或者你可以配置内存淘汰机制,当 Redis 达到内存上限时会冲刷掉旧的内容。
  • Redis 如何做内存优化?
  • Redis key 的过期时间和永久有效分别怎么设置?

EXPIRE 和 PERSIST 命令

  • Redis 中的管道有什么用?

一次请求 / 响应服务器能实现处理新的请求即使旧的请求还未被响应,这样就可以将多个命令发送到服务器,而不用等待回复,最后在一个步骤中读取该答复。
这就是管道(pipelining),是一种几十年来广泛使用的技术。例如许多 POP3 协议已经实现支持这个功能,大大加快了从服务器下载新邮件的过程。

事务

  • 什么是 redis 事务
  • Redis 事务相关命令
  • Redis 事务的三个阶段
  • watch 是如何监视实现的呢
  • 为什么 Redis 不支持回滚
  • redis 对 ACID 的支持性理解
  • Redis 事务其他实现

基于 Lua 脚本,Redis 可以保证脚本内的命令一次性、按顺序地执行,其同时也不提供事务运行错误的回滚,执行过程中如果部分命令运行错误,剩下的命令还是会继续运行完
基于中间标记变量,通过另外的标记变量来标识事务是否执行完成,读取数据时先读取该标记变量判断是否事务执行完成。但这样会需要额外写代码实现,比较繁琐

集群

主从复制

  • Redis 集群的主从复制模型是怎样的?
  • 全量复制的三个阶段?
  • 为什么会设计增量复制?
  • 增量复制的流程? 如果在网络断开期间,repl_backlog_size 环形缓冲区写满之后,从库是会丢失掉那部分被覆盖掉的数据,还是直接进行全量复制呢?
  • 为什么不持久化的主服务器自动重启非常危险呢?
  • 为什么主从全量复制使用 RDB 而不使用 AOF?
  • 为什么还有无磁盘复制模式?
  • 为什么还会有从库的从库的设计?

    哨兵机制

  • Redis 哨兵机制?哨兵实现了什么功能呢

  • 哨兵集群是通过什么方式组建的?
  • 哨兵是如何监控 Redis 集群的?
  • 哨兵如何判断主库已经下线了呢?
  • 哨兵的选举机制是什么样的?
  • Redis 1 主 4 从,5 个哨兵,哨兵配置 quorum 为 2,如果 3 个哨兵故障,当主库宕机时,哨兵能否判断主库 “客观下线”?能否自动切换?
  • 主库判定客观下线了,那么如何从剩余的从库中选择一个新的主库呢?
  • 新的主库选择出来后,如何进行故障的转移?

    Redis 集群

  • 说说 Redis 哈希槽的概念?为什么是 16384 个?

  • Redis 集群会有写操作丢失吗?为什么?

Redis 并不能保证数据的强一致性,这意味这在实际中集群在特定的条件下可能会丢失写操作。

应用场景

  • redis 客户端有哪些

Redisson、Jedis、lettuce 等等,官方推荐使用 Redisson。
Redisson 是一个高级的分布式协调 Redis 客服端,能帮助用户在分布式环境中轻松实现一些 Java 的对象 (Bloom filter, BitSet, Set, SetMultimap, ScoredSortedSet, SortedSet, Map, ConcurrentMap, List, ListMultimap, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, ReadWriteLock, AtomicLong, CountDownLatch, Publish / Subscribe, HyperLogLog)。

  • Redis 如何做大量数据插入? Redis2.6 开始 redis-cli 支持一种新的被称之为 pipe mode 的新模式用于执行大量数据插入工作。
  • redis 实现分布式锁实现?什么是 RedLock?
  • redis 缓存有哪些问题,如何解决
  • redis 和其它数据库一致性问题如何解决
  • redis 性能问题有哪些,如何分析定位解决

    新版本

  • Redis 单线程模型? 在 6.0 之前如何提高多核 CPU 的利用率?

可以在同一个服务器部署多个 Redis 的实例,并把他们当作不同的服务器来使用,在某些时候,无论如何一个服务器是不够的, 所以,如果你想使用多个 CPU,你可以考虑一下分片(shard)。

  • 6.0 版本中多线程