这里说的三种工作模式是指:
1、单机模式
2、分片模式
3、集群模式(since 3.0)
说明图详见以下:
使用jedis连接模式一:
//初始化连接private Jedis jedis=new Jedis("192.168.0.100", 6379);
jedis.set("a","b");
jedis.hmset(key, hash);
……
使用jedis连接模式二:
GenericObjectPoolConfig config=new GenericObjectPoolConfig();
config.setMaxIdle(32);
config.setMinIdle(12);
config.setTestOnBorrow(true);
config.setTestOnReturn(rtrue);
config.setTestWhileIdle(true);
List
for (int i = 0; i < shareds.size(); i++) {
shards.add(new JedisShardInfo("192.168.0.100", 6379, 200));
}
// 构造池
ShardedJedisPool shardedJedisPool= new ShardedJedisPool(config, shards);
ShardedJedis jedis=shardedJedisPool.getResource();
jedis.set("a","b");
jedis.hmset(key, hash);
……
使用jedis连接模式三:
Set
for (int i = 0; i < shareds.size(); i++) {
jedisClusterNodes.add(new HostAndPort("192.168.0.100",6379));
}
// 构造池
BinaryJedisCluster cluster= new BinaryJedisCluster(jedisClusterNodes);
cluster.set("a","b");
cluster.hmset(key, hash);
……
BinaryJedisCluster.java是为了让jedis支持byte数组形式value重写的一个类,参考网上文档,记不得来源了。以下是代码(部分):
public class BinaryJedisCluster extends JedisCluster {
public String set(final String key, final byte[] value) {
return new JedisClusterCommand
maxRedirections) {
public String execute(Jedis connection) {
return connection.set(SafeEncoder.encode(key), value);
}
}.run(key);
}
public byte[] getBytes(final String key) {
return new JedisClusterCommand<byte[]>(connectionHandler, timeout,
maxRedirections) {
public byte[] execute(Jedis connection) {
return connection.get(SafeEncoder.encode(key));
}
}.run(key);
}
public Set<byte[]> zrevrangeByScoreBytes(final String key, final double max,
final double min, final int offset, final int count) {
return new JedisClusterCommand
maxRedirections) {
public Set<byte[]> execute(Jedis connection) {
return connection.zrevrangeByScore(SafeEncoder.encode(key),
max, min, offset, count);
}
}.run(key);
}
public Set<byte[]> zrevrangeByScoreBytes(final String key, final String max,
final String min, final int offset, final int count) {
return new JedisClusterCommand
maxRedirections) {
public Set<byte[]> execute(Jedis connection) {
return connection.zrevrangeByScore(SafeEncoder.encode(key),
SafeEncoder.encode(max), SafeEncoder.encode(min), offset, count);
}
}.run(key);
}
public Long linsert(final String key, final LIST_POSITION where,
final byte[] pivot, final byte[] value) {
return new JedisClusterCommand<Long>(connectionHandler, timeout,
maxRedirections) {
public Long execute(Jedis connection) {
return connection.linsert(SafeEncoder.encode(key), where,
pivot, value);
}
}.run(key);
}
public Long lpushx(final String key, final byte[]... string) {
return new JedisClusterCommand<Long>(connectionHandler, timeout,
maxRedirections) {
public Long execute(Jedis connection) {
return connection.lpushx(SafeEncoder.encode(key), string);
}
}.run(key);
}
public Long rpushx(final String key, final byte[]... string) {
return new JedisClusterCommand<Long>(connectionHandler, timeout,
maxRedirections) {
public Long execute(Jedis connection) {
return connection.rpushx(SafeEncoder.encode(key), string);
}
}.run(key);
}
public List<byte[]> blpopBytes(final String arg) {
return new JedisClusterCommandbyte[]>>(connectionHandler,
timeout, maxRedirections) {
public List<byte[]> execute(Jedis connection) {
return connection.blpop(SafeEncoder.encode(arg));
}
}.run(null);
}
public List<byte[]> brpopBytes(final String arg) {
return new JedisClusterCommandbyte[]>>(connectionHandler,
timeout, maxRedirections) {
public List<byte[]> execute(Jedis connection) {
return connection.brpop(SafeEncoder.encode(arg));
}
}.run(null);
}
}
编译后jedis jar包下载地址:http://pan.baidu.com/s/1mgIPYDa
源码地址:http://pan.baidu.com/s/1jGIobBo