Redisson集群管理工具提供了通过程序化的方式,像redis-trib.rb脚本一样方便地管理Redis集群的工具。
以下范例展示了如何创建三主三从的Redis集群。
- ClusterNodes clusterNodes = ClusterNodes.create()
- .master("127.0.0.1:7000").withSlaves("127.0.0.1:7001", "127.0.0.1:7002")
- .master("127.0.0.1:7003").withSlaves("127.0.0.1:7004")
- .master("127.0.0.1:7005");
- ClusterManagementTool.createCluster(clusterNodes);
主节点127.0.0.1:7000的从节点有127.0.0.1:7001和127.0.0.1:7002。
主节点127.0.0.1:7003的从节点是127.0.0.1:7004。
主节点127.0.0.1:7005没有从节点。
以下范例展示了如何将一个节点踢出集群。
- ClusterManagementTool.removeNode("127.0.0.1:7000", "127.0.0.1:7002");
- // 或
- redisson.getClusterNodesGroup().removeNode("127.0.0.1:7002");
将从节点127.0.0.1:7002从其主节点127.0.0.1:7000里踢出。
以下范例展示了如何将数据槽在集群的主节点之间迁移。
- ClusterManagementTool.moveSlots("127.0.0.1:7000", "127.0.0.1:7002", 23, 419, 4712, 8490);
- // 或
- redisson.getClusterNodesGroup().moveSlots("127.0.0.1:7000", "127.0.0.1:7002", 23, 419, 4712, 8490);
将番号为23,419,4712和8490的数据槽从127.0.0.1:7002节点迁移至127.0.0.1:7000节点。
以下范例展示了如何将一个范围的数据槽在集群的主节点之间迁移。
- ClusterManagementTool.moveSlotsRange("127.0.0.1:7000", "127.0.0.1:7002", 51, 9811);
- // 或
- redisson.getClusterNodesGroup().moveSlotsRange("127.0.0.1:7000", "127.0.0.1:7002", 51, 9811);
将番号范围在[51, 9811](含)之间的数据槽从127.0.0.1:7002节点移动到127.0.0.1:7000节点。
以下范例展示了如何向集群中添加从节点。
- ClusterManagementTool.addSlaveNode("127.0.0.1:7000", "127.0.0.1:7003");
- // 或
- redisson.getClusterNodesGroup().addSlaveNode("127.0.0.1:7003");
将127.0.0.1:7003作为从节点添加至127.0.0.1:7000所在的集群里。
以下范例展示了如何向集群中添加主节点。
- ClusterManagementTool.addMasterNode("127.0.0.1:7000", "127.0.0.1:7004");
- // 或
- redisson.getClusterNodesGroup().addMasterNode("127.0.0.1:7004");
将127.0.0.1:7004作为主节点添加至127.0.0.1:7000所在的集群里。 Adds master node 127.0.0.1:7004 to cluster where 127.0.0.1:7000 participate in
Redisson的NodesGroup
对象提供了许些对Redis节点的操作。
- NodesGroup nodesGroup = redisson.getNodesGroup();
- nodesGroup.addConnectionListener(new ConnectionListener() {
- public void onConnect(InetSocketAddress addr) {
- // Redis节点连接成功
- }
-
- public void onDisconnect(InetSocketAddress addr) {
- // Redis节点连接断开
- }
- });
- 也可以用来PING单个Redis节点或全部节点。
-
- NodesGroup nodesGroup = redisson.getNodesGroup();
- Collection<Node> allNodes = nodesGroup.getNodes();
- for (Node n : allNodes) {
- n.ping();
- }
- // 或者
- nodesGroup.pingAll();
Redisson在底层采用了高性能异步非阻塞式Java客户端,它同时支持异步和同步两种通信模式。如果有哪些命令Redisson还没提供支持,也可以直接通过调用底层Redis客户端来实现。Redisson支持的命令在Redis命令和Redisson对象匹配列表里做了详细对比参照。
- // 在使用多个客户端的情况下可以共享同一个EventLoopGroup
- EventLoopGroup group = new NioEventLoopGroup();
-
- RedisClientConfig config = new RedisClientConfig();
- config.setAddress("redis://localhost:6379") // 或者用rediss://使用加密连接
- .setPassword("myPassword")
- .setDatabase(0)
- .setClientName("myClient")
- .setGroup(group);
-
- RedisClient client = RedisClient.create(config);
- RedisConnection conn = client.connect();
- // 或
- RFuture<RedisConnection> connFuture = client.connectAsync();
-
- conn.sync(StringCodec.INSTANCE, RedisCommands.SET, "test", 0);
- // 或
- conn.async(StringCodec.INSTANCE, RedisCommands.GET, "test");
-
- conn.close()
- // 或
- conn.closeAsync()
-
- client.shutdown();
- // 或
- client.shutdownAsync();