1.概述
为了减少频繁创建底层jedis对象销毁造成的资源浪费,jedis客户端提供了连接池pool解决这个问题
2.连接池
在目前阶段不管是单个Jedis对象,还是分片对象ShardedJedis都是一个对象,应用效率不高,在实际应用中,总要从代码中new出来然后用完了要关闭close.应该引入连接池
3.JedisPool
一次性创建多个jedis对象,都是连接一个节点的,用的时候从连接池中获取连接,用完了还回连接,提升对象的使用效率,不必频繁的创建销毁对象
/*
JedisPool
*/
@Test
public void test05(){
JedisPool pool=new JedisPool("10.9.118.11",6380);
//获取连接资源
Jedis jedis1 = pool.getResource();
jedis1.set("name","张三");
pool.returnResource(jedis1);
Jedis jedis2 = pool.getResource();
System.out.println(jedis2.get("name"));
pool.returnResource(jedis2);
}
4.ShardedJedisPool
如果说JedisPool管理了一批jedis对象,ShardedJedisPool管理了一批ShardedJedis
/*
分片连接池
*/
@Test
public void test06(){
//提供分片节点信息
List<JedisShardInfo> infos=new ArrayList<>();
infos.add(new JedisShardInfo("10.9.118.11",6379));
infos.add(new JedisShardInfo("10.9.118.11",6380));
infos.add(new JedisShardInfo("10.9.118.11",6381));
//连接池配置属性
JedisPoolConfig config=new JedisPoolConfig();
//定义连接池的连接上限,最大空闲,最小空闲,不同的使用环境这些数值配置不一样的
config.setMaxIdle(8);
config.setMinIdle(2);
config.setMaxTotal(200);
//创建连接池
ShardedJedisPool pool=new ShardedJedisPool(config,infos);
ShardedJedis resource = pool.getResource();
//可以实现api操作,分布式计算
pool.returnResource(resource);
}