《对线面试官》| 高频 Redis 面试题(下)
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
前言
继《对线面试官》| 高频 Redis 面试题(上)一文后,本文继续分享校招面试中常见的 Redis 面试题。
Redis 哨兵架构
哨兵架构是在 Redis 主从复制基础上建立的高可用解决方案。通过监控、自动故障切换和自动发现功能,提高了 Redis 的高可用性,减少了人工干预的需求。
Redis Cluster 架构
Redis 集群通过分片和提供复制及故障转移功能来管理数据,解决了 master 单点故障问题,提升了写操作的并发能力。数据通过 CRC16(KEY)%16384 哈希算法分配到不同的 master。
集群通信
Redis 集群内部节点通过 TCP 和 gossip 协议进行通信,使用 PING、PONG、MEET、FAIL等消息类型保证节点信息的一致性。
哈希槽映射与客户端数据定位
集群将数据映射到16384个哈希槽中,然后映射到 Redis 实例。客户端通过缓存的哈希槽信息定位数据所在节点。
生产环境中的 KEYS 命令
在生产环境中应慎用 KEYS * 命令,因为可能会导致服务阻塞。
Redis 4.0 的混合持久化
混合持久化结合了 RDB 文件内容和增量 AOF 日志,提高了 Redis 重启的效率。
内存用尽的影响
内存用尽时,如果设置了内存限制,会触发内存回收策略;如果未设置,可能导致进程被系统 OOM 杀死。
Redis 分布式锁
Redis 分布式锁通过 setnx 和 expire 命令来实现,但需要合并这两个命令以防锁无法释放。
Cluster 架构的高可用实现
Cluster 实现高可用通过故障检测和转移。节点通过发送 ping 消息来检测其他节点,并在失败时进行故障转移。
Cluster 不可用情况
如果三个没有 slave 的 master 节点中有一个失败,可能会导致集群因缺少哈希槽而不可用。
性能优化建议
建议保持主从节点在同一局域网,避免在压力大的 master 上增加 slave,利用散列表和集合类型数据存储来优化内存使用。
想要了解更多内容?