jedis針對三種redis工作模式的連線方式
阿新 • • 發佈:2019-02-02
這裡說的三種工作模式是指:
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<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
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<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
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<String>(connectionHandler, timeout,
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<Set<byte[]>>(connectionHandler, timeout,
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<Set<byte[]>>(connectionHandler, timeout,
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 JedisClusterCommand<List<byte[]>>(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 JedisClusterCommand<List<byte[]>>(connectionHandler,
timeout, maxRedirections) {
public List<byte[]> execute(Jedis connection) {
return connection.brpop(SafeEncoder.encode(arg));
}
}.run(null);
}
}
原始碼地址:http://pan.baidu.com/s/1jGIobBo