| 非集群環(huán)境下
 package com.chiwei.redis;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
import redis.clients.util.Pool;
public class RedisSingleClient {
	//未分片客戶端連接
	private Jedis jedis;
	//未分片客戶端連接池
	private JedisPool jedisPool;
	//分片客戶端連接
	private ShardedJedis shardedJedis;
	//分片客戶端連接池
	private ShardedJedisPool shardedJedisPool;
	//jedispool配置
	private JedisPoolConfig config;
	
	public void initJedisPoolConfig() {
		config = new JedisPoolConfig();
		config.setMaxTotal(100);
		config.setMaxIdle(10);
		config.setMaxWaitMillis(1000L);
		config.setTestOnBorrow(true);
		config.setTestOnReturn(true);
	}
	
	public void initJedisPool() {
		initJedisPoolConfig();
		jedisPool = new JedisPool(config,"192.168.11.176",7379);
	}
	
	public void initShardedJedisPool() {
		initJedisPoolConfig();
		List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
		shards.add(new JedisShardInfo("192.168.11.176",7379));
		shards.add(new JedisShardInfo("192.168.11.177",7379));
		shards.add(new JedisShardInfo("192.168.11.178",7379));
		shardedJedisPool = new ShardedJedisPool(config,shards);
	}
	
	public Jedis getJedis() {
		jedis = this.jedisPool.getResource();
		return jedis;
	}
	
	public ShardedJedis getShardedJedis() {
		shardedJedis = this.shardedJedisPool.getResource();
		return shardedJedis;
	}
	
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public void returnResource(Pool pool, Object redis) {
		if (redis != null) {
			pool.returnResourceObject(redis);
		}
	}
	
	public void set(String key, String value) {
		try {
			jedis = getJedis();
			shardedJedis = getShardedJedis();
			jedis.set(key, value);
			shardedJedis.getShard("chiwei").set("chiwei", "lining");
		} catch (Exception e) {
			e.printStackTrace();
			jedisPool.returnBrokenResource(jedis);
			shardedJedisPool.returnBrokenResource(shardedJedis);
		} finally {
			returnResource(jedisPool, jedis);
			returnResource(shardedJedisPool, shardedJedis);
		}
	}
	
	public String get(String key) {  
        String value = null;  
        try {  
            jedis = getJedis();
            value = jedis.get(key);  
        } catch (Exception e) {  
            e.printStackTrace();  
            // 釋放資源  
            jedisPool.returnBrokenResource(jedis);  
        } finally {  
            returnResource(jedisPool, jedis);  
        }  
        return value;  
    } 
	
	public String getShardValue(String key) {  
        String value = null;  
        try {  
        	shardedJedis = getShardedJedis();
            value = shardedJedis.getShard(key).get(key);
        } catch (Exception e) {  
            e.printStackTrace();  
            // 釋放資源  
            shardedJedisPool.returnBrokenResource(shardedJedis);
        } finally {  
        	returnResource(shardedJedisPool, shardedJedis);
        }  
        return value;  
    } 
	
	@Test
	public void test() {
		initJedisPool();
		initShardedJedisPool();
		jedis = getJedis();
		shardedJedis = getShardedJedis();
		jedis.set("momo", "nono");
		//shardedJedis.set("chiwei", "lining");
		System.out.println(jedis.get("momo"));
		//System.out.println(shardedJedis.get("chiwei"));
		shardedJedis.getShard("chiwei").set("chiwei", "lining");
		System.out.println(shardedJedis.getShard("chiwei").get("chiwei"));
	}
}
分片Shard的目的就是將數(shù)據(jù)均勻分布到多臺redis實例中
 以上的測試實例是簡單的key-value,下面試試復(fù)雜的key List 
 shardedJedis.lpush("chiwei", "one");
		shardedJedis.lpush("chiwei", "two");
		shardedJedis.lpush("chiwei", "three");
		shardedJedis.lpush("chiwei", "three");
		System.out.println(shardedJedis.llen("chiwei"));
		String str = shardedJedis.lpop("chiwei");
		System.out.println(str);list添加的元素可重復(fù) Set不能重復(fù) shardedJedis.sadd("chiwei", "one");
		shardedJedis.sadd("chiwei", "one"); 
 其它各種類型,請讀者自行嘗試,http://www./commands.html
 
 
 
 集群環(huán)境package com.chiwei.redis;
import java.util.HashSet;
import java.util.Set;
import org.junit.Test;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
public class RedisClusterClient {
	private String serverInfo = "172.30.129.145:7379,172.30.129.145:7380,172.30.129.146:7379,172.30.129.146:7380,172.30.129.147:7379,172.30.129.147:7380";
	private Set<HostAndPort> getClusterInfo(String serverInfo) {
		Set<HostAndPort> set = new HashSet<HostAndPort>();
		if(serverInfo==null||"".equals(serverInfo.length())) {
			throw new RuntimeException("The serverInfo can not be empty");
		}
		String ipPort[] = serverInfo.split(",");
		int len = ipPort.length;
		for(int i=0;i<len;i++) {
			String server[] = ipPort[i].split(":");
			set.add(new HostAndPort(server[0], Integer.parseInt(server[1])));
		}
		return set;
	}
	
	@Test
	public void test() {
		Set<HostAndPort> jedisClusterNodes = getClusterInfo(serverInfo);
		// Jedis Cluster will attempt to discover cluster nodes automatically
		JedisCluster jc = new JedisCluster(jedisClusterNodes);
		jc.set("foo", "bar");
		String value = jc.get("foo");
		System.out.println(value);
	}
}
通過JedisCluster對象來操作redis緩存。
 
 <dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.7.0</version>
</dependency>
 
 |