Redis 集群配置完成后,有的需要在Java中连接,
以下是使用Java的相关连接代码:
package com;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
/**
* @ClassName: JRedisClusterTest
* @Description: Redis集群测试
* @author sam
* @date 2015-5-29 上午10:01:44
* @version V1.0
*/
public class JRedisClusterTest {
/**
* 切片链接池
*/
private ShardedJedisPool shardedJedisPool;
/**
* 构造函数
*/
public JRedisClusterTest() {
initialShardedPool();
}
/**
* @Description: 关闭连接
* @param jedis
*/
private void returnResource(ShardedJedis jedis){
if (jedis!=null) {
shardedJedisPool.returnResource(jedis);
}
}
/**
* 初始化切片池
*/
private void initialShardedPool() {
// 池基本配置
JedisPoolConfig config = new JedisPoolConfig();
//是否启用后进先出, 默认true
config.setLifo(true);
//最大空闲连接数, 默认8个
config.setMaxIdle(8);
//最大连接数, 默认8个
config.setMaxTotal(8);
//获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间, 默认-1
config.setMaxWaitMillis(-1);
//逐出连接的最小空闲时间 默认1800000毫秒(30分钟)
config.setMinEvictableIdleTimeMillis(1800000);
//最小空闲连接数, 默认0
config.setMinIdle(0);
//每次逐出检查时 逐出的最大数目 如果为负数就是 : 1/abs(n), 默认3
config.setNumTestsPerEvictionRun(3);
//对象空闲多久后逐出, 当空闲时间>该值 且 空闲连接>最大空闲数 时直接逐出,不再根据MinEvictableIdleTimeMillis判断 (默认逐出策略)
config.setSoftMinEvictableIdleTimeMillis(1800000);
//在获取连接的时候检查有效性, 默认false
config.setTestOnBorrow(false);
//在空闲时检查有效性, 默认false
config.setTestWhileIdle(false);
// slave链接
List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
//(存在部分问题)
shards.add(new JedisShardInfo("172.y.x.202", 7000));
shards.add(new JedisShardInfo("172.y.x.203", 7001));
shards.add(new JedisShardInfo("172.y.x.204", 7000));
shardedJedisPool = new ShardedJedisPool(config, shards);
// 构造池
shardedJedisPool = new ShardedJedisPool(config, shards);
// shardedJedisPool =new ShardedJedisPool(config, shards, Hashing.MURMUR_HASH,Sharded.DEFAULT_KEY_TAG_PATTERN);
}
// 获取连接(1)
private ShardedJedis getResource() {
ShardedJedis jedis = shardedJedisPool.getResource();
// jedis.auth(pwd);
return jedis;
}
// 获取连接(2)
private JedisCluster getJedisCluster() {
//可以设置单节点即可访问所有节点数据
Set<HostAndPort> set = new HashSet<HostAndPort>();
set.add(new HostAndPort("172.168.63.202", 7000));
JedisCluster client = new JedisCluster(set);
// client.auth("123456");
return client;
}
/**
* redis存储字符串
*/
private static String testString(ShardedJedis jedis,String key) {
return jedis.get(key);
}
//test
public static void main(String[] args) {
JRedisClusterTest service = new JRedisClusterTest();
String key = "name";
//方式1
JedisCluster cluster = service.getJedisCluster();
cluster.set(key, "Cluster");
String name = cluster.get(key);
System.out.println("JedisCluster-name:" + name);
//方式2
ShardedJedis jedis = service.getResource();
String name2 = testString(jedis,key);
System.out.println("ShardedJedis-name:" + name2);
service.returnResource(jedis);
}
}
以上代码便是Redis集群使用Java连接的简单例子,可以用来测试集群的简单操作,
当然实际项目开发中,大部分是和Spring结合起来使用,Spring有相关Redis的工具类,相关代码将会在后面贴上来。