📄️ Redis如何实现高可用架构?
Redis 官方提供了三种分布式部署模式:主从模式、Sentinel 哨兵模式、Cluster 集群模式。此外,在 Redis Cluster 之前,也有一些基于中间代理路由或客户端路由的 Redis 的解决方案,比如 Jedis 自带的 ShardedJedis,或者推特的 Twemproxy。
📄️ Redis主从复制的原理是什么?
当从节点初次连接到主节点,或者掉线重连后进度落后较多时会进行一次全量数据同步。此时,主节点会生成 RDB 快照并传输给从节点,在此期间,主节点接受到的增量命令将会先写入 replication_buffer 缓冲区,等到从节点加载完 RDB 快照的数据后,再将缓冲区的命令传输给从节点,以次完成初次同步。
📄️ 什么是Redis-Sentinel集群?
针对普通主从模式无法自动进行故障转移的问题,Redis 在 2.6 及以上版本提供了哨兵功能。哨兵是一种运行在特殊模式下的 Redis 节点,它用于监控集群中的节点监控状态,并在主节点下线后实现自动故障转移。此外,为了避免单点故障问题,哨兵通常也会集群部署。
📄️ 什么是Redis-Cluster集群?
分片集群是 Redis 在 3.0 以后提供的一个集群部署方案,它主要解决的是集群的横向扩展问题。Redis 集群是一个去中心化的结构,它没有类似注册中心这样的全局管理者,因此集群中的每个节点都会通过 Gossip 协议与其他节点保持通信,以监控彼此的健康状态,并交换包括哈希槽的分配情况、疑似下线的节点情报在内的各项数据,并最终在每个节点都全量的保存集群的各项元数据。
📄️ Cluster集群可以基于一致性哈希算法么?
由于数据要分片存储在不同的服务器节点上,因此当用户发起请求时,我们会需要一个哈希算法保证对某个 Key 的请求总是路由到指定的服务器节点。传统的哈希算法基于长度(也就是节点数量)进行取模,因此当扩容和缩容时会需要对大量的数据进行迁移。而一致性哈希算法则用于解决这个问题。
📄️ 为什么Redis常规架构不适合海量请求?
Redis Cluster 是非常适合构建中小规模 Redis 集群,这里的中小规模指的是,大概几个到几十个节点这样规模的 Redis 集群。但是 Redis Cluster 不太适合构建超大规模集群,主要原因是,它采用了去中心化的设计。
📄️ Redis如何应对海量访问请求?
如果想让 Redis 应对海量流量访问,可以在客户端和 Redis 真实节点之间,加上一层代理服务。