Redis集群Java连接
阅读原文时间:2021年04月20日阅读:1

有关Redis 集群的具体配置,在前面的文章中已经有,
可以参考:https://blog.csdn.net/vtopqx/article/details/49246521

Redis 集群配置完成后,有的需要在Java中连接

以下是使用Java的相关连接代码:

package com;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;


/**
 * @ClassName: JRedisClusterTest
 * @Description: Redis集群测试
 * @author sam
 * @date 2015-5-29 上午10:01:44
 * @version V1.0
 */
public class JRedisClusterTest {

      /**
       * 切片链接池
       */
      private ShardedJedisPool shardedJedisPool;

      /**
       * 构造函数
       */
      public JRedisClusterTest() {
        initialShardedPool();
      }


      /**
       * @Description: 关闭连接
       * @param jedis
       */
      private void returnResource(ShardedJedis jedis){
          if (jedis!=null) {
              shardedJedisPool.returnResource(jedis);
        }
      }
      /**
       * 初始化切片池
       */
      private void initialShardedPool() {
        // 池基本配置
        JedisPoolConfig config = new JedisPoolConfig();
        //是否启用后进先出, 默认true
        config.setLifo(true);
        //最大空闲连接数, 默认8个
        config.setMaxIdle(8);
        //最大连接数, 默认8个
        config.setMaxTotal(8);
        //获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间,  默认-1
        config.setMaxWaitMillis(-1);
        //逐出连接的最小空闲时间 默认1800000毫秒(30分钟)
        config.setMinEvictableIdleTimeMillis(1800000);
        //最小空闲连接数, 默认0
        config.setMinIdle(0);
        //每次逐出检查时 逐出的最大数目 如果为负数就是 : 1/abs(n), 默认3
        config.setNumTestsPerEvictionRun(3);
        //对象空闲多久后逐出, 当空闲时间>该值 且 空闲连接>最大空闲数 时直接逐出,不再根据MinEvictableIdleTimeMillis判断  (默认逐出策略)
        config.setSoftMinEvictableIdleTimeMillis(1800000);
        //在获取连接的时候检查有效性, 默认false
        config.setTestOnBorrow(false);
        //在空闲时检查有效性, 默认false
        config.setTestWhileIdle(false);

        // slave链接
        List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
        //(存在部分问题)
        shards.add(new JedisShardInfo("172.y.x.202", 7000));
        shards.add(new JedisShardInfo("172.y.x.203", 7001));
        shards.add(new JedisShardInfo("172.y.x.204", 7000));
        shardedJedisPool = new ShardedJedisPool(config, shards);
        // 构造池
        shardedJedisPool = new ShardedJedisPool(config, shards);

//        shardedJedisPool =new ShardedJedisPool(config, shards, Hashing.MURMUR_HASH,Sharded.DEFAULT_KEY_TAG_PATTERN);

      }


    // 获取连接(1)
    private ShardedJedis getResource() {
        ShardedJedis jedis = shardedJedisPool.getResource();
        // jedis.auth(pwd);
        return jedis;
    }


    // 获取连接(2)
    private JedisCluster getJedisCluster() {
        //可以设置单节点即可访问所有节点数据
        Set<HostAndPort> set = new HashSet<HostAndPort>();
        set.add(new HostAndPort("172.168.63.202", 7000));
        JedisCluster client = new JedisCluster(set);
        // client.auth("123456");
        return client;
    }


    /**
     * redis存储字符串
     */

    private static String testString(ShardedJedis jedis,String key) {
        return jedis.get(key);
    }



    //test
    public static void main(String[] args) {
        JRedisClusterTest service = new JRedisClusterTest();

        String key = "name";

        //方式1
        JedisCluster cluster = service.getJedisCluster();
        cluster.set(key, "Cluster");
        String name = cluster.get(key);
        System.out.println("JedisCluster-name:" + name);

        //方式2
        ShardedJedis jedis = service.getResource();
        String name2 = testString(jedis,key);
        System.out.println("ShardedJedis-name:" + name2);
        service.returnResource(jedis);
    }

}

以上代码便是Redis集群使用Java连接的简单例子,可以用来测试集群的简单操作,

当然实际项目开发中,大部分是和Spring结合起来使用,Spring有相关Redis的工具类,相关代码将会在后面贴上来。