redis-集群模式
redis集群时redis提供的分布式数据库方案,集群通过分片来进行数据共享,并提供复制和故障转移功能。主备模式和集群模式在生产环境中还是很常见的。
节点
连接各个节点的命令:cluster meet <ip> <port>
启动时是否开启集群模式,cluster-enabled : yes | no
集群数据结构:
槽指派
redis集群通过分片方式来保存数据库中的键值对,集群的整个数据库被分为16384个槽(16MB)。
指派槽的命令:cluster addslotes 0 1 2 ... 5000
在集群中执行命令
计算键属于哪个槽:
1 | CRC16(key) & 16383 |
集群的键值对抱在数据库的redisDB的dict中之外,节点还会用clusterState结构中的slots_to_keys跳跃表来保存槽和键之间的关系。
重新分片
重新分片可以在线进行,集群不需要下线,并接续处理命令。redis集群的重新分片是通过集群的管理软件redis-trib负责执行的
ASK错误:
复制与故障转移
主挂了从服务器中选举出一个主服务器。
更多源码注释说明见https://github.com/dalaizhao/redis/tree/feature_code_comment