Redis的分片技术一般是通过客户端或代理来实现的
1、用jedis实现分片的时候,服务端不需要做任何配置即可
package com.djhu.redis.test;
import java.util.ArrayList;
import java.util.List;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
public class JedisShardTest
{
public static void main(String[] args)
{
List<JedisShardInfo> jedisShardInfoList = new ArrayList<JedisShardInfo>();
jedisShardInfoList.add(new JedisShardInfo("172.16.172.4", 6379));
jedisShardInfoList.add(new JedisShardInfo("172.16.172.4", 6380));
ShardedJedis sharded = new ShardedJedis(jedisShardInfoList);
sharded.set("key01", "a");
sharded.set("key02", "b");
sharded.set("key03", "c");
sharded.set("key04", "d");
sharded.set("key05", "e");
System.out.println(sharded.get("key03"));
}
}
2、用Jedis连接池实现分片
package com.djhu.redis.test;
import java.util.ArrayList;
import java.util.List;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.util.Hashing;
import redis.clients.util.Sharded;
public class JedisSharedFactory
{
// 最大可用连接数,默认值为8,如果赋值为-1则表示不限制
private static int MAX_TOTAL = 256;
// 最大空闲连接数,默认值为8
private static int MAX_IDLE = 32;
// 最小空闲连接数
private static int MIN_IDLE = 4;
// 最大等待连接毫秒数,默认值为-1表示永不超时
private static int MAX_WAIT = 3000;
// 连接redis超时时间
private static int TIMEOUT = 3000;
// true表示验证连接
private static boolean TEST_ON_BORROW = true;
//连接池
private static ShardedJedisPool jedisPool = null;
public static void initJedisPool()
{
try
{
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(MAX_TOTAL);
config.setMaxIdle(MAX_IDLE);
config.setMinIdle(MIN_IDLE);
config.setMaxWaitMillis(MAX_WAIT);
config.setTestOnBorrow(TEST_ON_BORROW);
List<JedisShardInfo> jedisShardInfoList = new ArrayList<JedisShardInfo>();
jedisShardInfoList.add(new JedisShardInfo("172.16.172.4", 6379));
jedisShardInfoList.add(new JedisShardInfo("172.16.172.4", 6380));
jedisPool = new ShardedJedisPool(config, jedisShardInfoList,Hashing.MURMUR_HASH,Sharded.DEFAULT_KEY_TAG_PATTERN);
}
catch (Exception e)
{
e.printStackTrace();
}
}
public synchronized static ShardedJedis getConnection()
{
try
{
if (jedisPool != null)
{
ShardedJedis resource = jedisPool.getResource();
return resource;
} else
{
return null;
}
}
catch (Exception e)
{
e.printStackTrace();
return null;
}
}
public static void returnResource(final ShardedJedis jedis)
{
if (jedis != null)
{
jedis.close();
}
}
public static void main(String[] args)
{
initJedisPool();
ShardedJedis redis = getConnection();
redis.set("key10", "j");
redis.set("key11", "k");
redis.set("key12", "l");
redis.set("key13", "m");
redis.set("key14", "n");
System.out.print(redis.get("key12"));
returnResource(redis);
}
}
Share the post "Redis分片(Jedis)"