通过单例模式访问redis集群

之前就在阿里云服务器上搭建了集群,但如何用Java访问到redis集群呢,肯定不是一个一个节点的访问,通过像是树干一样的接口来访问redis集群,但又不能每个访问redis集群的进程都生成一个新的cluster接口,所以这里选择单例模式来实现。

import org.jmqtt.common.config.StoreConfig;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;

import java.util.LinkedHashSet;
import java.util.Set;

public class RedisStoreManager {
    private StoreConfig redisConfig;
    private Set<HostAndPort> nodes = new LinkedHashSet<HostAndPort>();
    private JedisCluster cluster;
    private JedisPoolConfig poolConfig = new JedisPoolConfig();
    private volatile static RedisStoreManager INSTANCE ;

    private RedisStoreManager(){

    }

    public static RedisStoreManager getInstance(StoreConfig redisConfig){
        if (null == INSTANCE){
            synchronized (RedisStoreManager .class){
                if (null == INSTANCE){
                    INSTANCE = new RedisStoreManager();           //使用懒汉模式,只有在第一次访问的时候才创建实例
                    INSTANCE.redisConfig = redisConfig;
                }
            }
        }
        return INSTANCE;
    }

    public JedisCluster getCluster(){return cluster;}

    public void initialization(){
        poolConfig.setMaxTotal(redisConfig.getMaxActive());
        poolConfig.setMaxIdle(redisConfig.getMaxIdle());
        poolConfig.setMaxWaitMillis(redisConfig.getTimeout());
        String[] clusterNodes = redisConfig.getNodes().split(";");
        for (String node : clusterNodes){
            nodes.add(new HostAndPort(node.split(":")[0],Integer.valueOf(node.split(":")[1])));
        }
        this.cluster = new JedisCluster(nodes,poolConfig);
    }

}

在这里的单例中运用了双重检验锁,目的是为了防止创建多个实例而且不需要每次调用都要对对象上锁,极大提升效率。
只需要传入redis的配置信息例如节点地址和端口“127.0.0.1:7000;127.0.0.1:7001…”,maxIdle、Timeout等。详细的代码发布在我和同学一起做的一个项目JMQTT的GitHub上,传送门:https://github.com/Cicizz/jmqtt
JMQTT是用java语言开发的支持mqtt协议的高可用,高性能,高可扩展性的broker,采用netty作为通信层组件,支持插件化开发。在这个项目中我们用redis作为缓存,如果您觉得有帮助或者对我们的项目感兴趣,欢迎给我们的项目点个watch和star。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值