第一步:修改配置文件redis.conf的端口号
第二步:分别启动2个redis
第三步:书写RedisSharedPool类
package com.mmall.common;
import com.mmall.util.PropertiesUtil;
import redis.clients.jedis.*;
import redis.clients.util.Hashing;
import redis.clients.util.Sharded;
import java.util.ArrayList;
import java.util.List;
public class RedisSharedPool {
//使用静态属性,表示加载这个类的时候就把属性加载了
//用配置文件实现动态获取
// private static JedisPool pool;//不是分布式使用jedis连接池
private static ShardedJedisPool pool;//使用分布式用的连接池
private static Integer maxTotal= Integer.parseInt(PropertiesUtil.getProperty("redis.max.total","20"));//最大连接数
private static Integer maxIdle=Integer.parseInt(PropertiesUtil.getProperty("redis.max.idle","20"));//在jedispool种最大的idle状态jedis实例的个数
private static Integer minIdle=Integer.parseInt(PropertiesUtil.getProperty("redis.min.idle","20"));//在jedispool种最小的idle状态jedis实例的个数
private static Boolean testOnBorrow=Boolean.parseBoolean(PropertiesUtil.getProperty("redis.test.borrow","true"));//在borrow一个jedis实例的时候,是否要进行验证操作,如果为true,则得到的jedis实例肯定是可以使用的
private static Boolean testOnReturn=Boolean.parseBoolean(PropertiesUtil.getProperty("redis.test.return","true"));//在return一个jedis实例的时候,是否要进行验证操作,如果为true,则返回的jedis实例肯定是可以使用的
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进行设置
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<JedisShardInfo> jedisShardInfoList=new ArrayList<>(2);
jedisShardInfoList.add(info1);
jedisShardInfoList.add(info2);
pool=new ShardedJedisPool(config,jedisShardInfoList, Hashing.MURMUR_HASH, Sharded.DEFAULT_KEY_TAG_PATTERN);
}
//内部调用
static{
initPool();
}
//外部调用的方法
//获得jedis实例
public static ShardedJedis getJedis(){
return pool.getResource();
}
//将jedis实例放回去
public static void returnResource(ShardedJedis jedis){
if(jedis!=null){
pool.returnResource(jedis);
}
}
public static void returnBrokenResource(ShardedJedis jedis){
if(jedis!=null){
pool.returnBrokenResource(jedis);
}
}
//使用主函数进行测试[快捷键:psvm]
public static void main(String[] args) {
//1、拿一个jedis
ShardedJedis jedis = pool.getResource();
for(int i=0;i<10;i++){
jedis.set("key"+i,"value"+i);
}
returnResource(jedis);
System.out.println("end");
}
}
第四步:将RedisPoolUtil改为SharedRedisPoolUtil