Redis 三种模式(Single 、Cluster、Sentinel)的连接方式

52 篇文章 0 订阅
11 篇文章 10 订阅

    /**
     * 判断 redis 是否可以连接成功
     *
     * @param
     * @return
     */
    public Map<String, Object> urlLink(T_redis record) {
        String redisType = record.getRedis_type();
        String url = record.getUrl();
        List<Map<String, Object>> list = new ArrayList<>();
        int pre = url.lastIndexOf("/");
        int suffix = url.lastIndexOf("@");
        int index = url.lastIndexOf("?");
        String password = url.substring(pre + 1, suffix);
        String[] clusterList = url.substring(suffix + 1, index).split(",");
        for (int i = 0; i < clusterList.length; i++) {
            String host = clusterList[i].substring(0, clusterList[i].indexOf(":"));
            String post = clusterList[i].substring(clusterList[i].indexOf(":") + 1);
            Map<String, Object> map2 = new HashMap<>();
            map2.put("host", host);
            map2.put("post", post);
            list.add(i, map2);
        }
        if (RedisType.SINGLE.name().equals(redisType)) {
            return SingleTpyeLink(list, password);
        } else if (RedisType.CLUSTER.name().equals(redisType)) {
            return ClusterTpyeLink(list, password);
        } else {
            Set<String> set = new HashSet<>();
            int nameIndex = url.lastIndexOf("=");
            String masterName = url.substring(nameIndex + 1);
            for (String ipPost : clusterList) {
                set.add(ipPost);
            }
            return SentinelTpyeLink(set, password, masterName);
        }
    }

    /**
     * Single 连接测试方法
     *
     * @param list
     * @param password
     * @return
     */
    public Map<String, Object> SingleTpyeLink(List<Map<String, Object>> list, String password) {
        Map<String, Object> linkMap = new HashMap<>();
        try {
            String host = String.valueOf(list.get(0).get("host"));
            int post = Integer.parseInt((String) list.get(0).get("post"));
            Jedis jedis = new Jedis(host, post);
            jedis.auth(password);
            String ping = jedis.ping();
            if ("PONG".equals(ping)) {
                linkMap.put("linkState", true);
            }
        } catch (Exception e) {
            linkMap.put("linkState", false);
        }
        return linkMap;
    }

    /**
     * CLUSTER 连接测试方法
     *
     * @param list
     * @param password
     * @return
     */
    public Map<String, Object> ClusterTpyeLink(List<Map<String, Object>> list, String password) {
        Set<HostAndPort> clusterNodeList = new HashSet<HostAndPort>();
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        Map<String, Object> linkMap = new HashMap<>();
        for (int i = 0; i < list.size(); i++) {
            String host = String.valueOf(list.get(i).get("host"));
            int post = Integer.parseInt(String.valueOf(list.get(i).get("post")));
            clusterNodeList.add(new HostAndPort(host, post));
        }
        try {
            JedisCluster jedisCluster = new JedisCluster(clusterNodeList, 5000, 5000, 5, password, jedisPoolConfig);
            jedisCluster.setex("key_test", 10, "val_test");
            String key_test = jedisCluster.get("key_test");
            if ("val_test".equals(key_test)) {
                linkMap.put("linkState", true);
            }
        } catch (Exception e) {
            linkMap.put("linkState", false);
        }

        return linkMap;
    }

    /**
     * sentinel 连接测试方法
     *
     * @param
     * @param password
     * @return
     */
    public Map<String, Object> SentinelTpyeLink(Set<String> set, String password, String masterName) {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        Map<String, Object> linkMap = new HashMap<>();
        List<Map<String, Object>> list = new ArrayList<>();
        try {
            JedisSentinelPool jedisSentinelPool = new JedisSentinelPool(masterName, set, jedisPoolConfig, 5000, password);
            Jedis jedis = jedisSentinelPool.getResource();
            jedis.setex("key_test", 10, "val_test");
            String key_test = jedis.get("key_test");
            if ("val_test".equals(key_test)) {
                linkMap.put("linkState", true);
            } else {
                linkMap.put("linkState", false);
            }
        } catch (Exception e) {
            linkMap.put("linkState", false);
        }

        return linkMap;
    }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小高求学之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值