public class SpringDataRedisTestMain {
/**
* @param args
*/
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-redis-beans.xml");
RedisTemplate redisTemplate = (RedisTemplate)context.getBean("jedisTemplate");
//其中key采取了StringRedisSerializer
//其中value采取JdkSerializationRedisSerializer
ValueOperations<String, User> valueOper = redisTemplate.opsForValue();
User u1 = new User("zhangsan",12);
User u2 = new User("lisi",25);
valueOper.set("u:u1", u1);
valueOper.set("u:u2", u2);
System.out.println(valueOper.get("u:u1").getName());
System.out.println(valueOper.get("u:u2").getName());
}
/**
* 如果使用jdk序列化方式,bean必须实现Serializable,且提供getter/setter方法
* @author qing
*
*/
static class User implements Serializable{
/**
*
*/
private static final long serialVersionUID = -3766780183428993793L;
private String name;
private Date created;
private int age;
public User(){}
public User(String name,int age){
this.name = name;
this.age = age;
this.created = new Date();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getCreated() {
return created;
}
public void setCreated(Date created) {
this.created = created;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
}
3) RedisTemplate:
如果你使用过jedisPool连接池,在数据操作之前,你需要pool.getResource()即从连接池中获取“链接资源”(Jedis),在操作之后,你需要(必须)调用pool.returnResource()将资源归还个连接池。但是,spring-data-redis中,我们似乎并没有直接操作pool,那么spring是如何做到pool管理的呢??一句话:spring的“看门绝技”--callback。
public <T> T execute(RedisCallback<T> action):这个方法是redisTemplate中执行操作的底层方法,任何基于redisTemplate之上的调用(比如,valueOperations)最终都会被封装成RedisCallback,redisTemplate在execute方法中将会直接使用jedis客户端API进行与server通信,而且在如果使用了连接池,则会在操作之后执行returnSource。