当前redis版本(2.4.8)并不支持集群,但是jedis通过内置路由树的模式,对redis进行了简单的sharding,此时池内每个连接对象对应多个redis实例连接,示例代码如下:
package
com.suning.framework.sample.jedis.shardedpool;
import
java.util.ArrayList;
import
redis.clients.jedis.JedisPoolConfig;
import
redis.clients.jedis.JedisShardInfo;
import
redis.clients.jedis.ShardedJedis;
import
redis.clients.jedis.ShardedJedisPool;
/**
*
* 功能描述: jedis中的ShardedJedisPool为ShardeJedis的池实现
* 每个ShardedJedis中内置了路由树,可针对多个Redis实例进行路由
*
*/
public
class
ShardedJedisPoolTester {
public
static
void
main(String[] args) {
// 配置jedis连接池的基本属性
JedisPoolConfig jedisPoolConfig =
new
JedisPoolConfig();
jedisPoolConfig.setMaxActive(
50
);
//设置最大连接数
jedisPoolConfig.setMaxIdle(
10
);
//设置池中最大空闲连接数
jedisPoolConfig.setMaxWait(
2000
);
//设置获取连接最大等待时长
jedisPoolConfig.setTestOnBorrow(
true
);
//设置获取连接前是否进行连接测试
//配置sharding服务器信息
ArrayList<JedisShardInfo> shardInfoList =
new
ArrayList<JedisShardInfo>();
shardInfoList.add(
new
JedisShardInfo(
"localhost"
,
6379
,
"server_6379"
));
shardInfoList.add(
new
JedisShardInfo(
"localhost"
,
6380
,
"server_6380"
));
//根据连接池基本配置信息及sharding服务器信息列表,生成切片连接池
ShardedJedisPool jedisPool =
new
ShardedJedisPool(jedisPoolConfig, shardInfoList);
ShardedJedis jedis =
null
;
try
{
// 从连接池中获取连接
jedis = jedisPool.getResource();
// 执行redis操作
jedis.set(
"name"
,
"xiexu"
);
// 执行redis操作
String value = jedis.get(
"name"
);
System.out.println(value);
}
catch
(Exception ex) {
}
finally
{
// 释放jedis连接,而非断开连接
jedisPool.returnResource(jedis);}
}}