跳转到内容

redis典型面试题

lyonmu

redis有哪些数据结构,讲一下常用的数据结构的使用场景

数据结构有

redis使用cluster集群模式,三主三从六个节点的情况下,如果某个节点出现宕机,会发生哪些问题

宕机的是从节点

宕机的是主节点

这是集群高可用机制发挥作用的核心场景。具体会经历以下几个过程:

redis使用cluster集群彻底不可用情况

Redis进程到达设置的最大使用内存会发生什么

当 Redis 实例使用的内存达到了我们在配置文件中设置的 maxmemory(最大内存上限)时,会触发Redis 的内存淘汰机制。

Redis 一共提供了 8 种淘汰策略,我们可以通过两个维度来对它们进行分类:

介绍一下redis的RDB和AOF

RDB

RDB 是 Redis 默认的持久化方式。它会在指定的时间间隔内,将内存中的全量数据生成一个快照,以二进制压缩文件(dump.rdb)的形式保存到磁盘上。

AOF

AOF 是一种增量持久化方式。它会以日志的形式,将 Redis 接收到的每一个写命令都追加记录到文件(appendonly.aof)的末尾。重启时,通过重新执行这些命令来恢复数据。

redis支持事务吗,如果需要同时处理多个key要怎么做

支持简单事务,通过 MULTIEXECDISCARD 这三个命令来实现的。它最大的作用是保证隔离性:当客户端进入 MULTI 状态后,后续的命令会被放入一个队列中,直到执行 EXEC 时,这些命令才会被按顺序、一次性地执行,期间不会被其他客户端的命令插队。但是Redis 的事务不支持回滚。传统数据库(如 MySQL)如果在事务中有一条 SQL 执行失败,整个事务会回滚。但 Redis 不同,如果在执行 EXEC 时,队列中某一条命令执行报错,剩下的命令依然会继续执行,不会发生回滚。因此,Redis 事务只能保证命令是顺序执行的,无法保证严格的原子性。

如果需要多个key在某个事务内全部得到修改,则需要使lua脚本来进行执行,Redis 执行 Lua 脚本是单线程原子的,能完美替代事务实现“全成功或全失败”。

缓存穿透、缓存击穿、缓存雪崩

缓存穿透 (Penetration)

问题本质:请求查询的数据在缓存和数据库中都不存在,导致这些请求绕过缓存,持续打到数据库。 我的落地方案

缓存击穿 (Breakdown)

问题本质:针对的是单个热点 Key(比如爆款商品详情)。当这个 Key 刚好过期的瞬间,海量并发请求同时涌入,全部直接打到数据库。 我的落地方案

缓存雪崩 (Avalanche)

问题本质大量 Key 在同一时间集体失效,或者 Redis 服务整体宕机,导致流量洪峰全部压向数据库。 我的落地方案

Anterior
mysql典型面试题
Siguiente
kafka典型面试题