在使用Redis时,我们一般都会使用到SpringDataRedis,这个依赖给了我们两个使用Redis的模板,RedisTemplate和StringRedisTemplate!RedisTemplate的是基于JDK字节码的序列号方式,StringRedisTemplate是基于String的序列号方式。
这里我给大家推荐一个基于可视化的JSON序列化方式,使用后只需要存入一个基本对象,Redis会自动编译成String类型的JSON字符串,
这样对于前端的使用上也非常友好,而且可视化能力也非常高,具体步骤如下:
基本的redis配置我就不多说了。网上很多教程了。
一,添加一个SpringBoot的config类型的文件
二、添加如下代码
/**
* redisTemplate 序列化使用的jdkSerializeable, 存储二进制字节码, 所以自定义序列化类
* @param redisConnectionFactory
* @return
*/
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 使用Jackson2JsonRedisSerialize 替换默认序列化
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
// 设置value的序列化规则和 key的序列化规则
redisTemplate.setKeySerializer(new StringRedisSerializer());
//jackson2JsonRedisSerializer就是JSON序列号规则,
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
这样就设置好了一个全局的序列化方式了,是不是很简单,序列化规则共有8中,需要其他的话可以网上自己查找一下。
接下来说一下局部使用时的步骤
一、操作之前添加序列号方式
比如这里我们将一个基本的User对象存入Redis时就可以这样写,
//将对象序列化为JOSN格式储存在Redis中
try {
this.redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Users.class));
this.redisTemplate.opsForValue().set(user.getUserAccount(), user, 30, TimeUnit.MINUTES);
} catch (Exception e) {
System.out.println(e.getMessage());
System.out.println("向Redis中存值报错");
return null;
}finally {
//释放连接
RedisConnectionUtils.unbindConnection(redisTemplate.getConnectionFactory());
}
二、取值
//获取Redis中的对象
try {
this.redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Users.class));
user=(Users) this.redisTemplate.opsForValue().get(userAccount);
} catch (Exception e) {
System.out.println("从Redis中取值报错");
return null;
}finally {
//释放连接
RedisConnectionUtils.unbindConnection(redisTemplate.getConnectionFactory());
}
这里怎么感觉都是局部有点小麻烦,其实还可以封装一下,这里就大家自行发挥吧!!!