【Spring连载】使用Spring Data访问Redis(六)----Redis集群 Cluster

【Spring连载】使用Spring Data访问Redis(六)----Redis集群 Cluster

  • 一、使用Redis集群连接
  • 二、使用RedisTemplate 和 ClusterOperations

使用Redis Cluster需要Redis Server 3.0+版本。有关更多信息,请参阅 集群教程。当将Redis Repositories和Redis Cluster一同使用时,请参阅如何 在Redis集群上运行Redis Repositories。

一、使用Redis集群连接

Redis集群的行为与单节点Redis甚至Sentinel监控的master-replica环境不同。这是因为自动分片将key映射到16384个槽中的一个,这些槽分布在各节点中。因此,涉及多个key的命令必须断言(assert)所有key映射到完全相同的槽,以避免跨槽错误。单个集群节点仅提供一组专用keys。针对一个特定服务器发出的命令只返回该服务器提供的keys的结果。以KEYS命令作为一个简单的例子。当命令发布到集群环境中的服务器时,它只返回请求发送到的节点所匹配出的keys,而不返回集群中的所有符合条件的keys。因此,要获得集群环境中的所有keys,必须从所有已知的主节点读取keys。
虽然特定keys到相应槽服务节点(slot-serving node)的重定向由驱动程序库处理,但RedisClusterConnection涵盖了更高级别的功能,如跨节点收集信息或向群集中的所有节点发送命令。选取前面的keys示例,这意味着keys(pattern)方法选取集群中的每个主节点,并同时在每个主节点上运行keys命令,同时提取结果并返回累积的keys集合。如果只请求单个节点的keys,RedisClusterConnection为这些方法提供了重载(例如,keys(node, pattern))。
RedisClusterNode可以从RedisClusterConnection.clusterGetNodes获得,也可以使用主机和端口或节点Id来构建。
以下示例展示了在集群中运行的一组命令:
例1:在集群上运行命令示例

[email protected]:7379 > cluster nodes

 1. 6b38bb... 127.0.0.1:7379 master - 0 0 25 connected 0-5460                      
 2. 7bb78c... 127.0.0.1:7380 master - 0 1449730618304 2 connected
    5461-10922
 3. 164888... 127.0.0.1:7381 master - 0 1449730618304 3 connected 10923-16383
 4. b8b5ee... 127.0.0.1:7382 slave 6b38bb... 0 1449730618304 25 connected
    
	RedisClusterConnection connection = connectionFactory.getClusterConnnection();
 5. connection.set("thing1", value);
 6. connection.set("thing2", value);
 7. connection.keys("*");                                                
 8. connection.keys(NODE_7379, "*");                                    
 9. connection.keys(NODE_7380, "*");                            
 10. connection.keys(NODE_7381, "*");
 11. connection.keys(NODE_7382, "*");

 1. 服务槽0到5460的主节点被复制到位于7382的副本
 2. 主节点,服务槽位5461 ~ 10922
 3. 主节点,服务槽位10923 ~ 16383
 4. 副本节点,保存7379主节点的副本
 5. 请求路由到7381节点,服务槽12182
 6. 请求路由到7379节点,服务槽位5061
 7. 请求路由到节点7379,7380,7381→[thing1, thing2]
 8. 请求路由到节点7379→[thing2]
 9. 请求路由到节点7380→[]
 10. 请求路由到节点7381→[thing1]
 11. 请求路由到节点7382→[thing2]

二、使用RedisTemplate 和 ClusterOperations

你可能感兴趣的:(spring,redis,java)