Redis是一种nosql数据库,在开发中常用做缓存。Jedis是redis在Java中的redis- client.建立Maven Project之后,在POM.xml中

  1. 添加jedis和spring-data-redis的依赖如下:
<dependency>  
        <groupId>redis.clients</groupId>  
        <artifactId>jedis</artifactId>  
        <version>2.0.0</version>  
        <type>jar</type>  
        <scope>compile</scope>  
    </dependency>  
    <!-- spring-redis -->  
    <dependency>  
        <groupId>org.springframework.data</groupId>  
        <artifactId>spring-data-redis</artifactId>  
        <version>1.0.0.RELEASE</version>  
    </dependency>
  1. Redis连接数据库参数如下:applicationContext-redis.properties
#redis config  
    redis.pool.maxActive=100  
    redis.pool.maxIdle=20  
    redis.pool.maxWait=1000  
    redis.pool.testOnBorrow=true  
    redis.hostname=localhost  
    redis.port=6379  
    redis.password=
  1. 在上下文配置中使用key-value读取方式读取properties中的值:
<!-- Jedis 连接池配置-->  
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">  
        <property name="maxActive" value="${redis.pool.maxActive}" />  
        <property name="maxIdle" value="${redis.pool.maxIdle}" />  
        <property name="maxWait" value="${redis.pool.maxWait}" />  
        <property name="testOnBorrow" value="${redis.pool.testOnBorrow}" />  
    </bean>  
    <!-- Jedis ConnectionFactory 数据库连接配置-->  
    <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">  
        <property name="hostName" value="${redis.hostname}" />  
        <property name="port" value="${redis.port}" />  
        <property name="password" value="${redis.password}" />  
        <property name="poolConfig" ref="jedisPoolConfig" />  
    </bean>  
    <!—- redisTemplate配置,redisTemplate是对Jedis的对redis操作的扩展,有更多的操作,封装使操作更便捷 -->   
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"                                   p:connection-factory-ref="jedisConnectionFactory" />
  1. 上面redisTemplate已经基本配置完成。接下来创建User类,必须实现或者间接实现Serializable接口:
    Redis存储对象是使用序列化,spring-data-redis已经将序列化的功能内置,不需要我们去管,我们只需要调用api就可以使用。SerialVersionUID字段对序列化扩展有用,为了以后扩展或者缩减字段时不会造成反序列化出错。
  2. 注解注入RedisTemplate
public class RedisTemplateTest {
 
	@SuppressWarnings("rawtypes")
	@Autowired
	private RedisTemplate redisTemplate;
 
	@SuppressWarnings("unchecked")
	public void findAll() {
		// -----------------String类型数据操作 start--------------------
		ValueOperations<String, String> stringOperations = redisTemplate
		        .opsForValue();
		// String类型数据存储,不设置过期时间,永久性保存
		stringOperations.set("string1", "fiala");
		// String类型数据存储,设置过期时间为80秒,采用TimeUnit控制时间单位
		stringOperations.set("string2", "fiala", 80, TimeUnit.SECONDS);
		// 判断key值是否存在,存在则不存储,不存在则存储
		stringOperations.setIfAbsent("string1", "my fiala");
		stringOperations.setIfAbsent("string3", "my fiala");
		String value1 = stringOperations.get("string1");
		String value2 = stringOperations.get("string3");
		System.out.println(value1);
		System.out.println(value2);
		// -----------------String类型数据操作 end--------------------
 
		// -----------------其他值类型数据操作 start--------------------
		Demo demo = new Demo();
		demo.setId("1");
		demo.setName("fiala");
		List<Demo> demos = new ArrayList<Demo>();
		ValueOperations<String, Object> valueOperations = redisTemplate
		        .opsForValue();
		// 设置value为对象类型,且不设置过期时间,默认永久
		valueOperations.set("value1", demo);
		// 设置value为对象类型,设置过期时间为80秒,时间单位由TimeUnit控制
		valueOperations.set("value2", demos, 80, TimeUnit.SECONDS);
		Demo demo1 = (Demo) valueOperations.get("value1");
		System.out.println(demo1.toString());
		// -----------------其他值类型数据操作 end--------------------
 
		// -----------------List数据类型操作 start------------------
		ListOperations<String, Object> listOperations = redisTemplate
		        .opsForList();
		for (int i = 0; i < 5; i++) {
			Demo listDemo = new Demo();
			listDemo.setId("\"" + i + "\"");
			listDemo.setName("fiala" + i);
			listOperations.leftPush("list1", listDemo);
			listOperations.rightPush("list2", listDemo);
		}
		// 可给数据排序
		Demo demo2 = (Demo) listOperations.leftPop("list1");
		Demo demo3 = (Demo) listOperations.rightPop("list2");
		System.out.println(demo2.toString());
		System.out.println(demo3.toString());
		// -----------------List数据类型操作 end------------------
 
		// -----------------set数据类型操作 start------------------
		SetOperations<String, Object> setOperations = redisTemplate.opsForSet();
		for (int i = 0; i < 5; i++) {
			Demo setDemo = new Demo();
			setDemo.setId("\"" + i + "\"");
			setDemo.setName("fiala" + i);
			setOperations.add("set1", setDemo);
		}
		Demo demo4 = (Demo) setOperations.pop("set1");
		System.out.println(demo4.toString());
		// -----------------set数据类型操作 end------------------
 
		// -----------------zset数据类型操作 start------------------
		ZSetOperations<String, Object> zSetOperations = redisTemplate
		        .opsForZSet();
		zSetOperations.add("zset", "fiala", 0);
		zSetOperations.add("zset", "my fiala", 1);
		System.out.println(zSetOperations.rangeByScore("zset", 0, 1));
		// -----------------zset数据类型操作 end------------------
 
		// -----------------hash数据类型操作 start------------------
		HashOperations<String, Object, Object> hashOperations = redisTemplate
		        .opsForHash();
		Map<String, String> map = new HashMap<String, String>();
		map.put("map1", "fiala1");
		map.put("map2", "fiala2");
		hashOperations.putAll("hash", map);
		System.out.println(hashOperations.entries("hash"));
		// -----------------hash数据类型操作 start------------------
	}
}

附: 大部分的用户都喜欢用RedisTemplate,它相应的包是org.springframework.data.redis.core。该模板实际是Redis模块的核心类,因为它的功能丰富。模板为Redis交互提供了高级抽象。虽然RedisConnection提供接受和返回二进制值(字节数组)的低级方法,但该模板可以处理序列化和连接管理,使得用户不需要处理太多的细节。
此外,模板提供了操作视图(按照Redis命令参考分组),它们提供了丰富的、现成的接口用于对特定类型或者特定键的操作(通过KeyBound接口),如下所述:

接口

描述

Key类型操作

ValueOperations

操作Redis String(或者Value)类型数据

ListOperations

操作Redis List类型数据

SetOperations

操作Redis Set类型数据

ZSetOperations操作

Redis ZSet(或者Sorted Set)类型数据

HashOperations

操作Redis Hash类型数据

HyperLogLogOperations

操作Redis HyperLogLog类型数据,比如:pfadd,pfcount,…

GeoOperations

操作Redis Geospatial类型数据,比如:GEOADD,GEORADIUS,…)

Key绑定操作

BoundValueOperations

Redis字符串(或值)键绑定操作

BoundListOperations

Redis列表键绑定操作

BoundSetOperations

Redis Set键绑定操作

BoundZSetOperations

Redis ZSet(或Sorted Set)键绑定操作

BoundHashOperations

Redis Hash键绑定操作

BoundGeoOperations

Redis Geospatial 键绑定操作

一旦经过配置,该模板就是线程安全的,它可以被多个实例重复使用。
开箱即用,RedisTemplate使用了基于Java的串行器来进行大部分的操作。这就意味着,任何对象通过模板的读写都会通过Java来进行序列化/反序列化。该模板的序列化机制改变起来也很容易,并且Redis模块在org.springframework.data.redis.serializer包中提供了多种可用的实现,详情请参考Serializers。你也可以通过设置enableDefaultSerializer属性为false,将其他的序列化实现都设置成null,并将RedisTemplate和原生的字节数组一起使用。注意该模板的key不允许为null值,除非底层序列化程序可以接受。获取更多序列化器的信息,请阅读javadoc。
使用实例:
上面是官网上介绍的大概的功能,RedisTemplate提供了很多方法,详细具体的方法请参考官网:http://docs.spring.io/spring-data/redis/docs/current/api/org/springframework/data/redis/core/RedisTemplate.html。