参考一下这篇文章: http://snowolf.iteye.com/blog/1666908
也可以借鉴一下这个的思路,仅供参考:
package com.ttpod.cache.impl;
import com.ttpod.cache.Cache;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* date: 12-9-27 上午10:01
*
* @author: long.chen@ttpod.com
*/
public class RedisImpl implements Cache {
/**
* 1 day
*/
private static final int DEFAULT_TIME_TO_LIVE = 24 * 3600;
private int timeToLive = DEFAULT_TIME_TO_LIVE;
private StringRedisTemplate redisTemplate;
private final RedisSerializer<Object> objSer = new JdkSerializationRedisSerializer();
public void setTimeToLive(int timeToLive) {
this.timeToLive = timeToLive;
}
public void setRedisTemplate(StringRedisTemplate redisTemplate) {
this.redisTemplate = redisTemplate;
}
@Override
public void set(String key, final Object value, final int expire) {
if(value instanceof Map){
redisTemplate.opsForHash().putAll(key, (Map) value );
redisTemplate.expire(key, expire, TimeUnit.SECONDS);
}else{
final byte[] rawKey = rawKey(key);
redisTemplate.execute(new RedisCallback<Object>() {
@Override
public Object doInRedis(RedisConnection connection) throws DataAccessException {
connection.openPipeline();
connection.set(rawKey,objSer.serialize(value));
connection.expire(rawKey,expire);
return connection.closePipeline();
}
});
}
}
@Override
public void set(String key, Object value) {
set(key,value,timeToLive);
}
@Override
public Object get(String key) {
final byte[] rawKey = rawKey(key);
return redisTemplate.execute(new RedisCallback<Object>() {
@Override
public Object doInRedis(RedisConnection connection) throws DataAccessException {
byte[] value = connection.get(rawKey);
return value == null ? null : objSer.deserialize(value);
}
});
}
@Override
public void delete(String key) {
redisTemplate.delete(key);
}
@Override
public void flushAll() {
redisTemplate.execute(new RedisCallback<Object>() {
@Override
public Object doInRedis(RedisConnection connection) throws DataAccessException {
connection.flushAll();
return null;
}
});
}
private byte[] rawKey(String key) {
return redisTemplate.getStringSerializer().serialize(key);
}
}