结论
有以下几种Redis集群方案,先说结论:
- Redis cluster:应当优先考虑使用Redis cluster。
- codis:旧项目如果仍在使用codis,可继续使用,但也推荐迁移到Redis cluster。
- twemproxy:不建议使用,与codis同为proxy方案,但不如codis(twemproxy不能平滑地扩容)。
- 客户端分片:应当禁止使用,因为扩容复杂,如果2个服务同时读写,其中一个修改了路由,另一个不修改会有问题。
下面重点介绍Redis cluster和codis。
Redis cluster原理
架构
是官方支持的Redis集群方案:
- 去中心化架构,不依赖外部存储,每个节点都有槽位信息、以及一部分数据,各节点之间使用gossip协议交互信息
- 划分为16384个slot槽位,每个key按照分片规则,对key做crc16 % 16384得到slot id
- 每个Redis节点存储了一部分槽位数据,各个Redis节点共同分担16384个slot槽位
- 客户端需遵守Redis cluster规范读写数据,客户端连接集群时,会得到一份集群的槽位配置信息,客户端本地缓存了slot到node的映射关系,以便直