高可用
637 字3 分钟interview-questions
高可用
Q:说一下热点 key 和大 key
A:热点 key 主要是在高并发场景下被频繁读写的同一个 redis key,短时间内 QPS 极高,单点压力过高导致 redis 性能下降,甚至会击穿后端,大 key 则是指 redis 中存储的单个 key 占用内存过大,可能会阻塞 redis 主线程或导致内存溢出、慢查询等问题,解决方法的话可以将单个热点 key 拆成多个子 key,然后对同一 key 并发请求做请求合并,只发一次真实请求,其他请求等待结果复用,也可以把主从节点做读写分离;大 key 的话可以拆分成小 key,然后渐进式迭代访问,分批读取,使用哈希结构这样每次广播可以只做差量更新
Q:有过使用分布式锁的经验吗,分布式锁底层用的是哪两个命令
A:我在项目里主要是用 redis 做分布式锁,底层主要是用 SETNX 抢锁,然后再用 EXPIRE 给锁设置 TTL,释放时会先用一段 Lua 脚本来校验锁的持有者标识,只有匹配才会执行 DEL,避免误删锁
Q:redis 集群是什么,你的 redis 是什么集群,主 redis 宕机了库存还能做吗
A:redis 集群是一种分布式部署方案,通过主从、分片和故障自动转移来实现高可用,在我的项目中我用的是 redis cluster 模式,一共三主三从,16384 个哈希槽自动分片,如果主节点宕机,集群会自动触发 failover 把从节点提升为主节点来继续处理请求,不影响业务,如果用 redis 做库存,那在设计上会配合主从复制、幂等扣减、数据库兜底等机制,确保即使 redis 出故障也不会出现库存丢失或订单错误