1.单机版测试,未使用连接池

@Test
	public void singleTest() throws Exception {
		
		Jedis jedis=new Jedis("192.168.28.130",6379);
                //简单的String set
		jedis.set("name", "jack");
		
		//如果你在redis.conf 中配置了requirepass xxxx验证授权,则需要填写授权密码
		jedis.auth("123456");
		
		String result = jedis.get("name");
		//list set,应为list是有序的所以需要设置元素在list集合的索引
		//jedis.lset(key, index, value)
		//hash set 由于是存储在映射表,所以我们需要指定field域
		//jedis.hset(key, field, value)
		System.out.println(result);
		
		jedis.close();
	}

2.单机版,使用连接池

@Test
	public void dataSourceTest() throws Exception {
		//创建jedis连接池
		JedisPool jedisPool=new JedisPool("192.168.28.130",6379);
		//从连接池中拿到jedis对象
		Jedis jedis=jedisPool.getResource();
		jedis.auth("123456");
		
		jedis.set("pass", "123456");
		String result = jedis.get("pass");
		
		System.out.println(result);
		
		//关闭jedis连接对象
		jedis.close();
	
		//当系统关闭时需要关闭jedis连接池
		jedisPool.close();
	}

3.集群版

@Test
	public void clusterTest() throws Exception {
		
		//定义集群中所有的节点
		Set<HostAndPort> nodes=new HashSet<HostAndPort>();
		nodes.add(new HostAndPort("192.168.28.129",7001));
		nodes.add(new HostAndPort("192.168.28.129",7002));
		nodes.add(new HostAndPort("192.168.28.129",7003));
		nodes.add(new HostAndPort("192.168.28.129",7004));
		nodes.add(new HostAndPort("192.168.28.129",7005));
		nodes.add(new HostAndPort("192.168.28.129",7006));
	
		
		//创建jedisCluster对象
	    //注意JedisCluster在项目中是单例存在的
		JedisCluster cluster=new JedisCluster(nodes);
		
		cluster.set("name", "jack");
		String result = cluster.get("name");
		
		System.out.println(result);
		
		//在系统关闭时需要关闭jedis集群
		//cluster.close();
		
	}

注意:java.lang.NumberFormatException: For input string: "7001@17001"

解决:由于redis集群的采用的版本是2.7的,在maven的pom.xml中将jedis的版本改成2.9(包含)以上的版本就可以了

Jedis与Spring的整合

单机版:

定义JedisClient接口

public interface JedisClient {

	public String set(String key, String value);

	public String get(String key);

	/**
	 * Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。 Redis 中每个 hash 可以存储
	 * 232 - 1 键值对(40多亿)
	 * 
	 * @param key
	 * @param item
	 * @param value
	 * @return
	 */
	public Long hset(String key, String filed, String value);

	public String hget(String key, String field);

	/**
	 * Redis Incr 命令将 key 中储存的数字值增一。 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
	 * 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。 本操作的值限制在 64 位(bit)有符号数字表示之内
	 * 
	 * @param key
	 * @return
	 */
	public Long incr(String key);
	
	public Long decr(String key);

	/**
	 * Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边) 一个列表最多可以包含 232 - 1 个元素
	 * (4294967295, 每个列表超过40亿个元素)。
	 * 
	 * @param key
	 * @param values
	 * @return
	 */
	public Long lpush(String key, String... values);

	public List<String> lrange(String key, long begin, long end);

	public Long rpush(String key, String... values);

	/**
	 * Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。 Redis
	 * 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 232 - 1 (4294967295,
	 * 每个集合可存储40多亿个成员)
	 * 
	 * @param key
	 * @param members
	 * @return
	 */
	public Long sadd(String key, String... members);

	// return all the smenmbers
	public Set<String> smembers(String key);

	/**
	 * Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
	 * 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
	 * 有序集合的成员是唯一的,但分数(score)却可以重复。 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232
	 * - 1 (4294967295, 每个集合可存储40多亿个成员)。
	 * 
	 * @param key
	 * @param score
	 * @param member
	 * @return
	 */
	public Long zadd(String key, double score, String member);

	public Set<String> zrange(String key, Long begin, Long end);

	// 为缓存数据设置过期时间
	public Long expire(String key,int second);

	// 返回过期剩余时间
	public Long ttl(String key);

}

定义单机版jedis实现类

public class JedisClientSingle implements JedisClient {
	
	@Value("${redis_single_auth}")
	private String redis_single_auth;

	@Autowired
	private JedisPool jedisPool;


	@Override
	public String set(String key, String value) {

		Jedis jedis = jedisPool.getResource();
		jedis.auth(redis_single_auth);
		String result = jedis.set(key, value);
		// 关闭连接
		jedis.close();
		return result;
	}

	@Override
	public String get(String key) {

		Jedis jedis = jedisPool.getResource();
		jedis.auth(redis_single_auth);
		String result = jedis.get(key);
		jedis.close();
		return result;
	}

	@Override
	public Long hset(String key, String field, String value) {
		Jedis jedis = jedisPool.getResource();
		jedis.auth(redis_single_auth);
		Long result = jedis.hset(key, field, value);
		jedis.close();
		return result;
	}

	@Override
	public String hget(String key, String field) {
		Jedis jedis = jedisPool.getResource();
		jedis.auth(redis_single_auth);
		String result = jedis.hget(key, field);
		jedis.close();
		return result;
	}

	@Override
	public Long incr(String key) {
		Jedis jedis = jedisPool.getResource();
		jedis.auth(redis_single_auth);
		Long result = jedis.incr(key);
		jedis.close();
		return result;
	}

    ......
}

在Spring中进行相关配置

<!--单机版jedis连接池配置 -->
<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
    <constructor-arg name="host" value="${redis_single_server}"></constructor-arg>
    <constructor-arg name="port" value="${redis_single_port}"></constructor-arg>
</bean>
<!--单机jedis实现类 -->
<bean id="jedisClientSingle" class="com.ncs.rest.component.impl.JedisClientSingle" />

集群版:

定义jedis实现类

public class JedisClientCluster implements JedisClient {

	@Autowired
	private JedisCluster jedisCluster;

	@Override
	public String set(String key, String value) {

		return jedisCluster.set(key, value);
	}

	@Override
	public String get(String key) {

		return jedisCluster.get(key);
	}

	@Override
	public Long hset(String key, String field, String value) {

		return jedisCluster.hset(key, field, value);
	}

	@Override
	public String hget(String key, String item) {

		return jedisCluster.hget(key, item);
	}

	@Override
	public Long incr(String key) {

		return jedisCluster.incr(key);
	}

	@Override
	public Long lpush(String key, String... values) {

		return jedisCluster.lpush(key, values);
	}
    ......
}

在spring中进行相关配置

<!--集群jedisCluster配置 -->
	<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
		<constructor-arg>
			<set>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="${redis_cluster_server}"></constructor-arg>
					<constructor-arg name="port" value="${redis_cluster_port1}"></constructor-arg>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="${redis_cluster_server}"></constructor-arg>
					<constructor-arg name="port" value="${redis_cluster_port2}"></constructor-arg>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="${redis_cluster_server}"></constructor-arg>
					<constructor-arg name="port" value="${redis_cluster_port3}"></constructor-arg>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="${redis_cluster_server}"></constructor-arg>
					<constructor-arg name="port" value="${redis_cluster_port4}"></constructor-arg>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="${redis_cluster_server}"></constructor-arg>
					<constructor-arg name="port" value="${redis_cluster_port5}"></constructor-arg>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="${redis_cluster_server}"></constructor-arg>
					<constructor-arg name="port" value="${redis_cluster_port6}"></constructor-arg>
				</bean>
			</set>
		</constructor-arg>
	</bean>

	<!--集群jedis实现类 -->
	<bean id="jedisClientCluster"
		class="com.ncs.rest.component.impl.JedisClientCluster" />