• Redisson集群管理工具、对Redis节点的操作


    一、集群管理工具

    Redisson集群管理工具提供了通过程序化的方式,像redis-trib.rb脚本一样方便地管理Redis集群的工具。

    1、 创建集群

    以下范例展示了如何创建三主三从的Redis集群。

    1. ClusterNodes clusterNodes = ClusterNodes.create()
    2. .master("127.0.0.1:7000").withSlaves("127.0.0.1:7001", "127.0.0.1:7002")
    3. .master("127.0.0.1:7003").withSlaves("127.0.0.1:7004")
    4. .master("127.0.0.1:7005");
    5. 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没有从节点。

    2、 踢出节点

    以下范例展示了如何将一个节点踢出集群。

    1. ClusterManagementTool.removeNode("127.0.0.1:7000", "127.0.0.1:7002");
    2. //
    3. redisson.getClusterNodesGroup().removeNode("127.0.0.1:7002");

    将从节点127.0.0.1:7002从其主节点127.0.0.1:7000里踢出。

    3、 数据槽迁移

    以下范例展示了如何将数据槽在集群的主节点之间迁移。

    1. ClusterManagementTool.moveSlots("127.0.0.1:7000", "127.0.0.1:7002", 23, 419, 4712, 8490);
    2. //
    3. 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节点。

    以下范例展示了如何将一个范围的数据槽在集群的主节点之间迁移。

    1. ClusterManagementTool.moveSlotsRange("127.0.0.1:7000", "127.0.0.1:7002", 51, 9811);
    2. //
    3. 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节点。

    4、 添加从节点

    以下范例展示了如何向集群中添加从节点。

    1. ClusterManagementTool.addSlaveNode("127.0.0.1:7000", "127.0.0.1:7003");
    2. //
    3. redisson.getClusterNodesGroup().addSlaveNode("127.0.0.1:7003");

    将127.0.0.1:7003作为从节点添加至127.0.0.1:7000所在的集群里。

    5、添加主节点

    以下范例展示了如何向集群中添加主节点。

    1. ClusterManagementTool.addMasterNode("127.0.0.1:7000", "127.0.0.1:7004");
    2. //
    3. 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

    二、对Redis节点的操作

    Redisson的NodesGroup对象提供了许些对Redis节点的操作。

    1. NodesGroup nodesGroup = redisson.getNodesGroup();
    2. nodesGroup.addConnectionListener(new ConnectionListener() {
    3. public void onConnect(InetSocketAddress addr) {
    4. // Redis节点连接成功
    5. }
    6. public void onDisconnect(InetSocketAddress addr) {
    7. // Redis节点连接断开
    8. }
    9. });
    10. 也可以用来PING单个Redis节点或全部节点。
    11. NodesGroup nodesGroup = redisson.getNodesGroup();
    12. Collection<Node> allNodes = nodesGroup.getNodes();
    13. for (Node n : allNodes) {
    14. n.ping();
    15. }
    16. // 或者
    17. nodesGroup.pingAll();

    三、底层Redis客户端

    Redisson在底层采用了高性能异步非阻塞式Java客户端,它同时支持异步和同步两种通信模式。如果有哪些命令Redisson还没提供支持,也可以直接通过调用底层Redis客户端来实现。Redisson支持的命令在Redis命令和Redisson对象匹配列表里做了详细对比参照。

    1. // 在使用多个客户端的情况下可以共享同一个EventLoopGroup
    2. EventLoopGroup group = new NioEventLoopGroup();
    3. RedisClientConfig config = new RedisClientConfig();
    4. config.setAddress("redis://localhost:6379") // 或者用rediss://使用加密连接
    5. .setPassword("myPassword")
    6. .setDatabase(0)
    7. .setClientName("myClient")
    8. .setGroup(group);
    9. RedisClient client = RedisClient.create(config);
    10. RedisConnection conn = client.connect();
    11. //
    12. RFuture<RedisConnection> connFuture = client.connectAsync();
    13. conn.sync(StringCodec.INSTANCE, RedisCommands.SET, "test", 0);
    14. //
    15. conn.async(StringCodec.INSTANCE, RedisCommands.GET, "test");
    16. conn.close()
    17. //
    18. conn.closeAsync()
    19. client.shutdown();
    20. //
    21. client.shutdownAsync();

     

  • 相关阅读:
    AR实景儿童闯关游戏开发
    美联储加息负面效应外溢
    spring-oauthorization-server整合
    【STM32】--基础了解
    企业刚开始上云选择什么配置的云服务器比较合适?
    EFCore学习笔记(2)——实体类型
    一行日志,让整个文件导出服务导出内容都为空..
    北大肖臻老师《区块链技术与应用》系列课程学习笔记[20]以太坊-权益证明
    LabVIEW性能和内存管理 1
    OpenCV 图像与视频的基础操作
  • 原文地址:https://blog.csdn.net/leesinbad/article/details/133578179