更新时间:2022-08-06 GMT+08:00

Redisson

介绍使用同一VPC内弹性云服务器ECS上的Redisson连接Redis实例的方法。更多的客户端的使用方法请参考Redis客户端

  • 如果创建Redis实例时设置了密码,使用Redisson客户端连接Redis时,需要配置密码进行连接,建议不要将明文密码硬编码在代码中。
  • 连接单机、主备、Proxy集群实例需要使用Redisson的SingleServerConfig配置对象中的useSingleServer方法,Cluster集群实例需要使用ClusterServersConfig对象中的useClusterServers方法。

前提条件

  • 已成功申请Redis实例,且状态为“运行中”。
  • 已创建弹性云服务器,创建弹性云服务器的方法,请参见《弹性云服务器用户指南》。
  • 如果弹性云服务器为Linux系统,该弹性云服务器必须已经安装java编译环境。

操作步骤

  1. 查看并获取待连接Redis实例的IP地址/域名和端口。

    具体步骤请参见查看实例信息

  2. 登录弹性云服务器。
  3. 首先使用maven在pom.xml添加如下依赖。

    <dependency>
      <groupId>org.redisson</groupId>
      <artifactId>redisson</artifactId>
      <version>3.16.8</version>
    </dependency>

  4. 连接池推荐配置

    连接保活推荐配置:

    #  ping连接间隔(配置PING探测会增加Redis负载,需要根据连接数调整,建议值至少配置为1000以上,连接数越多值配置越大,Redis活跃连接数超过5000时不建议配置)
    pingConnectionInterval: 3000
     

    单机模式配置示例:(超时时间、连接池大小等需要根据业务实际情况进行调整,本章节仅作为示例值)

          redisson:
                config:
                    singleServerConfig:
                        #  连接超时,单位:毫秒
                        connectTimeout: 10000
                        #  命令等待超时,单位:毫秒
                        timeout: 3000
                        #  命令失败重试次数
                        retryAttempts: 3
                        #  命令重试发送时间间隔,单位:毫秒
                        retryInterval: 1500
                        #  最小空闲连接数
                        connectionMinimumIdleSize: 30
                        #  连接池大小
                        connectionPoolSize: 50
                        #  redis数据库编号
                        database: 0
                        #  DNS监测时间间隔,单位:毫秒
                        dnsMonitoringInterval: 5000
                    #  ping连接间隔
                    pingConnectionInterval: 3000
     

    集群模式配置示例:(超时时间、连接池大小等需要根据业务实际情况进行调整)

            redisson:
                config:
                    clusterServersConfig:
                        #  连接空闲超时,单位:毫秒
                        idleConnectionTimeout: 100000
                        #  连接超时,单位:毫秒
                        connectTimeout: 10000
                        #  命令等待超时,单位:毫秒
                        timeout: 3000
                        #  命令失败重试次数
                        retryAttempts: 3
                        #  命令重试发送时间间隔,单位:毫秒
                        retryInterval: 1500
                        #  失败从节点重连间隔时间
                        failedSlaveReconnectionInterval: 3000
                        #  失败从节点校验间隔时间
                        failedSlaveCheckInterval: 60000
                        #  单个连接最大订阅数量
                        subscriptionsPerConnection: 5
                        #  客户端名称
                        clientName: null
                        #  发布和订阅连接的最小空闲连接数
                        subscriptionConnectionMinimumIdleSize: 1
                        #  发布和订阅连接池大小
                        subscriptionConnectionPoolSize: 50
                        #  从节点最小空闲连接数
                        slaveConnectionMinimumIdleSize: 24
                        #  从节点连接池大小
                        slaveConnectionPoolSize: 64
                        #  主节点最小空闲连接数
                        masterConnectionMinimumIdleSize: 24
                        #  主节点连接池大小
                        masterConnectionPoolSize: 64
                        #  对主节点变化节点状态扫描的时间间隔 - 单位是毫秒
                        scanInterval: 1000
                        #  ping连接间隔
                        pingConnectionInterval: 3000
                        #  是否保持连接
                        keepAlive: false
                        #  默认启用 tcpNoDelay 设置
                        tcpNoDelay: false

  5. 使用Redis Java (Redisson)客户端连接实例。

    • Redisson单连方式连接Redis单机、主备、proxy集群示例。
      Config config = new Config();
      SingleServerConfig singleServerConfig = config.useSingleServer();
      singleServerConfig.setAddress("redis://host:port");
      // singleServerConfig.setPassword("********");
      RedissonClient redisson = Redisson.create(config);
      // 测试concurrentMap,put方法的时候就会同步到redis中
      ConcurrentMap<String, Object> map = redisson.getMap("FirstMap");
      map.put("wanger", "男");
      map.put("zhangsan", "nan");
      map.put("lisi", "女");
      ConcurrentMap resultMap = redisson.getMap("FirstMap");
      System.out.println("resultMap==" + resultMap.keySet());
      // 测试Set集合
      Set mySet = redisson.getSet("MySet");
      mySet.add("wanger");
      mySet.add("lisi");
      Set resultSet = redisson.getSet("MySet");
      System.out.println("resultSet===" + resultSet.size());
      // 测试Queue队列
      Queue myQueue = redisson.getQueue("FirstQueue");
      myQueue.add("wanger");
      myQueue.add("lili");
      myQueue.add("zhangsan");
      myQueue.peek();
      myQueue.poll();
      Queue resultQueue = redisson.getQueue("FirstQueue");
      System.out.println("resultQueue===" + resultQueue);
      // 关闭连接
      redisson.shutdown();
    • Redisson连接池方式连接Redis单机、主备、proxy集群示例。
      // 1.初始化
      Config config = new Config();
      SingleServerConfig singleServerConfig = config.useSingleServer();
      singleServerConfig.setAddress("redis://host:6379");
      //设置对于master节点的连接池中连接数最大为500
      singleServerConfig.setConnectionPoolSize(500);
      // 那么这些连接将会自动被关闭,并从连接池里去掉。时间单位是毫秒。
      singleServerConfig.setIdleConnectionTimeout(10000);
      RedissonClient redisson = Redisson.create(config);
      // 测试concurrentMap,put方法的时候就会同步到redis中
      ConcurrentMap<String, Object> map = redisson.getMap("FirstMap");
      map.put("wanger", "男");
      map.put("zhangsan", "nan");
      map.put("lisi", "女");
      ConcurrentMap resultMap = redisson.getMap("FirstMap");
      System.out.println("resultMap==" + resultMap.keySet());
      // 测试Set集合
      Set mySet = redisson.getSet("MySet");
      mySet.add("wanger");
      mySet.add("lisi");
      Set resultSet = redisson.getSet("MySet");
      System.out.println("resultSet===" + resultSet.size());
      // 测试Queue队列
      Queue myQueue = redisson.getQueue("FirstQueue");
      myQueue.add("wanger");
      myQueue.add("lili");
      myQueue.add("zhangsan");
      myQueue.peek();
      myQueue.poll();
      Queue resultQueue = redisson.getQueue("FirstQueue");
      System.out.println("resultQueue===" + resultQueue);
      // 关闭连接
      redisson.shutdown();
    • Redisson连接cluster集群示例。
      Config config = new Config();
      ClusterServersConfig clusterServersConfig = config.useClusterServers();
      clusterServersConfig.addNodeAddress("redis://host:port");
      // 设置密码
      // clusterServersConfig.setPassword("********");
      RedissonClient redisson = Redisson.create(config);
      ConcurrentMap<String, Object> map = redisson.getMap("FirstMap");
      map.put("wanger", "男");
      map.put("zhangsan", "nan");
      map.put("lisi", "女");
      ConcurrentMap resultMap = redisson.getMap("FirstMap");
      System.out.println("resultMap==" + resultMap.keySet());
      // 2.测试Set集合
      Set mySet = redisson.getSet("MySet");
      mySet.add("wanger");
      mySet.add("lisi");
      Set resultSet = redisson.getSet("MySet");
      System.out.println("resultSet===" + resultSet.size());
      //3.测试Queue队列
      Queue myQueue = redisson.getQueue("FirstQueue");
      myQueue.add("wanger");
      myQueue.add("lili");
      myQueue.add("zhangsan");
      myQueue.peek();
      myQueue.poll();
      Queue resultQueue = redisson.getQueue("FirstQueue");
      System.out.println("resultQueue===" + resultQueue);
      // 关闭连接
      redisson.shutdown();