我们现在先写一个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呢,我们也会做一个扩展知识点