這裏說的三種工做模式是指:java
一、單機模式
數組
二、分片模式
spa
三、集羣模式(since 3.0)
code
說明圖詳見如下:文檔
使用jedis鏈接模式一: get
//初始化鏈接 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鏈接模式三:string
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); } }
編譯後jedis jar包下載地址:http://pan.baidu.com/s/1mgIPYDa hash
源碼地址:http://pan.baidu.com/s/1jGIobBoio