Redis在单机模式时,使用数据结构dict
来实现数据库。
Redis在集群模式时,也是使用数据结构dict
来实现数据库,但是集群模式对于数据库有其他需求,包括数据的节点无关性、内部操作对客户端需要屏蔽、冗余备份等,并且在一定的情况,数据还需要在不同的节点间实现迁移。
在所有模式下,Redis的节点数据的备份都是使用备份
来实现的。这个暂时不深入。
Redis引入的slot
来解决如何实现集群模式下部分需求的问题。
事实下,节点并不是存储在slot
里面,slot
只是用于管理数据与节点相联的手段而已。在处理相关逻辑问题时,redis
使用slot
作为索引来管理数据下的所有数据。
举一个例子,集群模式下,使用redis-cli连接服务器节点A(指派了slot
[2000-3000])并issue
如下指令set name derekzhuo
。
-node A
计算name
的slot
为1000
,发现slot 1000
不在本节点上,向redis-cli
返回该slot
的节点信息;
-redis-cli
连接新的node
,并且重新issue
该指令。
以上流程就是cluster
模式下如何处理一个键的流程,也可以很清楚地看出slot
的作用其实就是用于做key
索引而已。