您的位置:首页 > 数据库 > Redis

Redis存储List<Map<String, Object>>

2017-11-06 21:07 706 查看
这两天做排行榜的缓存,在对List容器进行序列化时,报reditTemplate未被定义的错误.查了一些资料大致了解了Springboot中使用redis的一些之前没用到过得内容.
首先StringRedisTemplate使用的是StringRedisSerializer
RedisTemplate使用的是JdkSerializationRedisSerializer


我们先实现对象的序列化接口:

public class RedisObjectSerializer implements RedisSerializer<Object> {
private Converter<Object, byte[]> serializer = new SerializingConverter();
private Converter<byte[], Object> deserializer = new DeserializingConverter();
static final byte[] EMPTY_ARRAY = new byte[0];

@Override
public Object deserialize(byte[] bytes) {
if (isEmpty(bytes)) {
return null;
}
try {
return deserializer.convert(bytes);
} catch (Exception ex) {
throw new SerializationException("Cannot deserialize", ex);
}
}

@Override
public byte[] serialize(Object object) {
if (object == null) {
return EMPTY_ARRAY;
}
try {
return serializer.convert(object);
} catch (Exception ex) {
return EMPTY_ARRAY;
}
}

private boolean isEmpty(byte[] data) {
return (data == null || data.length == 0);
}
}


然后配置针对List

@Configuration
public class RedisConfig extends CachingConfigurerSupport {

@Bean
public RedisTemplate<String, List<Map<String, Object>>> redisTemplate(RedisConnectionFactory redisConnectionFactory) {

RedisTemplate<String, List<Map<String, Object>>> template = new RedisTemplate<String, List<Map<String, Object>>>();
template.setConnectionFactory(redisConnectionFactory);
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new RedisObjectSerializer());
return template;
}

}


然后就可以进行 get 和 set的正常调用了:

redisTemplate.opsForValue().set(KEY_RANK_DOWNLOAD, resultList);
List<Map<String, Object>> value = redisTemplate.opsForValue().get(KEY_RANK_DOWNLOAD);


详细了解更多关于redis对数据的操作,可以查看Spring Data Redis
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息