Redisson初始化

我们现在先写一个Redisson的初始化类,这个类写在common里面,这个类名叫RedissonManager,首先这个Manager

肯定是要添加到我们的Spring容器当中,增加@Component注解,我们使用代码的方式来集成Redisson

private Config config = new Config();

那这个Config导入包的时候千万不要导错,我们导入的一定是redisson的config,然后要声明一个初始化的一个Redisson,

private Redisson redisson = null;

现在我们就要那Redisson server的ip和端口,我们来到RedisShardedPool里边,把这两个配置拿过来,

    private final static String redis1Ip = PropertiesUtil.getProperty("redis1.ip");
    private final static Integer redis1Port = Integer.parseInt(PropertiesUtil
	.getProperty("redis1.port"));
	
这样redis1和redis2都拿过来了,既然说到RedisShardedPool,ip可以用逗号进行分割,端口也可以用逗号进行分割,

并且他们是匹配的,而我们在下面new JedisShardInfo的时候,然后通过一个遍历放到一个集合当中,而这个size也可以不指定

    private static String redis1Ip = PropertiesUtil.getProperty("redis1.ip");
    private static Integer redis1Port = Integer.parseInt(PropertiesUtil.getProperty("redis1.port"));
    private static String redis2Ip = PropertiesUtil.getProperty("redis2.ip");
    private static Integer redis2Port = Integer.parseInt(PropertiesUtil.getProperty("redis2.port"));




    private static void initPool(){
        JedisPoolConfig config = new JedisPoolConfig();

        config.setMaxTotal(maxTotal);
        config.setMaxIdle(maxIdle);
        config.setMinIdle(minIdle);

        config.setTestOnBorrow(testOnBorrow);
        config.setTestOnReturn(testOnReturn);

        config.setBlockWhenExhausted(true);//连接耗尽的时候,是否阻塞,false会抛出异常,true阻塞直到超时。
		默认为true。

        JedisShardInfo info1 = new JedisShardInfo(redis1Ip,redis1Port,1000*2);

        JedisShardInfo info2 = new JedisShardInfo(redis2Ip,redis2Port,1000*2);

        List jedisShardInfoList = new ArrayList(2);

        jedisShardInfoList.add(info1);
        jedisShardInfoList.add(info2);

        pool = new ShardedJedisPool(config,jedisShardInfoList, Hashing.MURMUR_HASH,
		Sharded.DEFAULT_KEY_TAG_PATTERN);
    }

这样分片的reids就可以做一个动态的加载了,也就是我们在修改完配置之后,重启tomcat就OK了,那接着回到redisson里边,

现在我们声明一个初始化方法

@PostConstruct
private void init() {
	try {
		//在redis环境没有搭建起来之前,这里先注释上,否则项目启动不起来。

		127.0.0.1:6379
//            config.useSingleServer().setAddress(new StringBuilder()
.append(redis1Ip).append(":").append(redis1Port).toString());


		//单主模式
//            config.useMasterSlaveServers().setMasterAddress(new StringBuilder()
.append(redis1Ip).append(":").append(redis1Port).toString());


		//主从模式
//            config.useMasterSlaveServers().setMasterAddress("10.211.55.6:6379")
.addSlaveAddress("10.211.55.6:6380");


//            redisson = (Redisson) Redisson.create(config);
		log.info("初始化Redisson结束");
	} catch (Exception e) {
		log.error("redisson init error", e);
	}
}

我们可以通过静态块调用init方法,或者我们在这里面换一个方式,使用@PostConstruct这么一个注解,我们RedissonManager

在构造器完成之后,执行init方法,那现在我们有两个redis节点,redisson还是不支持一致性算法的,但是没有关系,

因为我们前面也看了Spring Session源码,里面也不支持,那我们在实际上线的时候呢,可以把Spring Session和Redisson,

单独使用一个redis,或者让他们单独使用一个database
redisson配置非常简单,config.useSingleServer,然后它是一个链式调用,要看源码,有的源码的注释还是写的非常好的,

    /**
     * Set server address. Use follow format -- host:port
     *
     * @param address of Redis
     * @return config
     */
    public SingleServerConfig setAddress(String address) {
        if (address != null) {
            this.address = URLBuilder.create(address);
        }
        return this;
    }
    public URL getAddress() {
        if (address != null) {
            return address;
        }
        return null;
    }
    void setAddress(URL address) {
        if (address != null) {
            this.address = address;
        }
    }

返回值就是config,我们这里要改成ip:port的一个方式

config.useSingleServer().setAddress(new StringBuilder().append(redis1Ip)
.append(":").append(redis1Port).toString());

redisson = (Redisson) Redisson.create(config);

我们要把RedissonManager注入到其他类使用,但是我们使用的是Redisson这个对象,redisson是私有的,所以我们要开放他

我们添加一个get方法,只开放reidsson就OK了,这个方法是public的,现在我们只用了一个SinlgeServer Redis1,前面讲

Redisson的时候也有说,对于主从Reids呢,我们也会做一个扩展知识点

 

你可能感兴趣的:(Redisson初始化)