All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.cybermkd.plugin.redis.RedisClusterPlugin Maven / Gradle / Ivy

The newest version!
package com.cybermkd.plugin.redis;

import com.cybermkd.common.Plugin;
import com.cybermkd.common.util.Stringer;
import com.cybermkd.log.Logger;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;

import java.io.IOException;
import java.util.Set;

/**
 * 创建人:T-baby
 * 创建日期: 16/7/5
 * 文件描述:
 */
public class RedisClusterPlugin implements Plugin {
    // 集群名称
    String clusterName = null;

    // 集群对象
    JedisCluster jedisCluster = null;

    // 超时时间
    Integer timeout = null;

    // 连接池
    GenericObjectPoolConfig poolConfig = null;

    // 最多重定向次数
    Integer maxRedirections = null;

    // 集群地址集合
    Set redisClusterNodes;

    private Logger logger = Logger.getLogger(RedisClusterPlugin.class);

    /**
     * 传入集群信息
     *
     * @param clusterName       集群名称
     * @param redisClusterNodes 集群地址集合
     */
    public RedisClusterPlugin(String clusterName, Set redisClusterNodes) {

        // 检查数据
        this.isRightHostAndPortSet(clusterName, redisClusterNodes);

        // 绑定集群名称
        this.clusterName = clusterName;

        // 绑定地址集合
        this.redisClusterNodes = redisClusterNodes;

    }

    /**
     * 传入集群信息
     *
     * @param clusterName       集群名称
     * @param redisClusterNodes 集群地址集合
     * @param timeout           超时时间
     */
    public RedisClusterPlugin(String clusterName, Set redisClusterNodes, Integer timeout) {

        // 复用传入集群方法
        this(clusterName, redisClusterNodes);

        // 超时时间绑定
        this.timeout = timeout;

    }

    /**
     * 传入集群信息
     *
     * @param clusterName       集群名称
     * @param redisClusterNodes 集群地址集合
     * @param poolConfig        连接池对象
     */
    public RedisClusterPlugin(String clusterName, Set redisClusterNodes, GenericObjectPoolConfig poolConfig) {

        // 复用传入集群方法
        this(clusterName, redisClusterNodes);

        // 连接池绑定
        this.poolConfig = poolConfig;

    }

    /**
     * 传入集群信息
     *
     * @param clusterName       集群名称
     * @param redisClusterNodes 集群地址集合
     * @param timeout           超时时间
     * @param poolConfig        连接池配置
     */
    public RedisClusterPlugin(String clusterName, Set redisClusterNodes, Integer timeout, GenericObjectPoolConfig poolConfig) {

        // 复用传入集群方法
        this(clusterName, redisClusterNodes, timeout);

        // 连接池绑定
        this.poolConfig = poolConfig;

    }

    /**
     * 传入集群信息
     *
     * @param clusterName       集群名称
     * @param redisClusterNodes 集群地址集合
     */
    public RedisClusterPlugin(String clusterName, Set redisClusterNodes, Integer timeout, Integer maxRedirections) {

        // 复用传入集群方法
        this(clusterName, redisClusterNodes, timeout);

        // 连接池绑定
        this.maxRedirections = maxRedirections;

    }

    /**
     * 传入集群信息
     *
     * @param clusterName       集群名称
     * @param redisClusterNodes 集群地址集合
     * @param poolConfig        连接池对象
     */
    public RedisClusterPlugin(String clusterName, Set redisClusterNodes, Integer timeout, Integer maxRedirections, GenericObjectPoolConfig poolConfig) {

        // 复用传入集群方法
        this(clusterName, redisClusterNodes, timeout, maxRedirections);

        // 连接池绑定
        this.poolConfig = poolConfig;

    }

    @Override
    public boolean start() {

        if (timeout != null && maxRedirections != null && poolConfig != null) {
            jedisCluster = new JedisCluster(redisClusterNodes, timeout, maxRedirections, poolConfig);
        } else if (timeout != null && maxRedirections != null) {
            jedisCluster = new JedisCluster(redisClusterNodes, timeout, maxRedirections);
        } else if (timeout != null && poolConfig != null) {
            jedisCluster = new JedisCluster(redisClusterNodes, timeout, poolConfig);
        } else if (timeout != null) {
            jedisCluster = new JedisCluster(redisClusterNodes, timeout);
        } else if (poolConfig != null) {
            jedisCluster = new JedisCluster(redisClusterNodes, poolConfig);
        } else {
            jedisCluster = new JedisCluster(redisClusterNodes);
        }

        // 加入集群集合
        RedisCluster.addCache(clusterName, jedisCluster);

        return true;
    }

    @Override
    public boolean stop() {

        // 清除出集群集合
        JedisCluster removeRedisCluster = RedisCluster.removeCache(clusterName);

        // 关闭集群链接
        try {
            removeRedisCluster.close();
        } catch (IOException e) {
            logger.error(e.getMessage());
        }

        return false;

    }

    // 判断传入的集群位置资料是否正确
    private void isRightHostAndPortSet(String clusterName, Set redisClusterNodes) {

        // 集群名称不能为空
        if (Stringer.isBlank(clusterName)) {
            throw new IllegalArgumentException("clusterName can not be blank.");
        }

        // 检查集群具体地址和端口号是否正常
        if (redisClusterNodes != null && redisClusterNodes.size() > 0) {
            for (HostAndPort hap : redisClusterNodes) {

                // 获取主机ip
                String host = hap.getHost();

                // 空字符串
                if (Stringer.isBlank(host)) {
                    throw new IllegalArgumentException("host can not be blank.");
                }

                // 获取端口
                Integer port = hap.getPort();

                // 空端口数据
                if (port == null) {
                    throw new IllegalArgumentException("port can not be blank.");
                }

            }
        } else {

            // 集群集合数据为空
            throw new IllegalArgumentException("redisClusterNodes can not be blank.");

        }

    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy