Object get(String key);
boolean add(String key, Object value);
boolean add(String key, Object value, long expireInMilliSeconds);
boolean replace(String key, Object value);
boolean replace(String key, Object value, long expireInMilliSeconds);
boolean delete(String key);
}
//这样封装好的redis方法,我们在使用的时候直接调用 redisDao中的方法就可以了。
public class RedisDAO implements ICacheDAO {
RedisTemplate redisTemplate;
public void setRedisTemplate(RedisTemplate redisTemplate) {
this.redisTemplate = redisTemplate;
}
//向redis中添加值
@Override
public boolean add(final String key, final Object value) {
redisTemplate.execute(new RedisCallback<Object>() {
@Override
public Object doInRedis(RedisConnection connection) throws DataAccessException {
connection.set(redisTemplate.getStringSerializer().serialize(key), redisTemplate.getValueSerializer().serialize(value));
return true;
}
});
return false;
}
@Override
public boolean add(final String key, final Object value, final long expireInMilliSeconds) {
redisTemplate.execute(new RedisCallback<Object>() {
@Override
public Object doInRedis(RedisConnection connection) throws DataAccessException {
connection.setEx(redisTemplate.getStringSerializer().serialize(key), expireInMilliSeconds, redisTemplate.getValueSerializer().serialize(value));
return true;
}
});
return false;
}
//替换redis中的值
@Override
public boolean replace(final String key, final Object value) {
return add(key, value); //redis没有replace的概念,add即为替换
}
//替换redis中的值,并且让redis中的值保存一段时间
@Override
public boolean replace(final String key, final Object value, final long expireInMilliSeconds) {
return add(key, value, expireInMilliSeconds); //redis没有replace的概念,add即为替换
}
//获取redis中的值
@Override
public Object get(final String key) {//todo 首次无法取到时,会报异常,需要检查一下
return redisTemplate.execute(new RedisCallback<Object>() {
@Override
public Object doInRedis(RedisConnection connection) throws DataAccessException {
byte[] key_bytes = redisTemplate.getStringSerializer().serialize(key);
if (connection.exists(key_bytes)) {
byte[] value = connection.get(key_bytes);
Object object = redisTemplate.getValueSerializer().deserialize(value);
return object;
}
return null;
}
});
}
//清除redis中的值
@Override
public boolean delete(final String key) {
redisTemplate.execute(new RedisCallback<Object>() {
public Object doInRedis(RedisConnection connection) {
connection.del(redisTemplate.getStringSerializer().serialize(key));
return true;
}
});
return false;
}
}