默认的redisTemplate序列化源码
默认的序列化为jdk序列化,但这样虽然在idea操作数据时不会乱码,如果我们从命令行查看就会乱码;而且默认的redisTemplate为RedisTemplate<Object, Object>,而我们更常用的为RedisTemplate<String, Object>,所以我们一般自己配置redisTemplate
其中json的序列化可以使用redis包下自带的Jackson或者导入fastjson包
使用自带的Jackson
@Configuration
public class redisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
//为了开发方便,我们一般创建String类型的redis模板
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(redisConnectionFactory);
//采用json序列化并对其作出配置
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.activateDefaultTyping( LaissezFaireSubTypeValidator.instance ,
ObjectMapper.DefaultTyping.NON_FINAL,
JsonTypeInfo.As.WRAPPER_ARRAY);//该方法是指定序列化输入的类型,就是将数据库里的数据按照一定类型存储到redis缓存中。
jackson2JsonRedisSerializer.setObjectMapper(om);//完成配置,放在jackson2JsonRedisSerializer序列化中
//创建一个String类型的序列化对象
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
template.setKeySerializer(stringRedisSerializer);//key采用String的序列化方式
template.setValueSerializer(jackson2JsonRedisSerializer);//value采用上面定义的json序列化方式
template.setHashKeySerializer(stringRedisSerializer);//hash采用上面定义的string序列化方式
template.setHashValueSerializer(jackson2JsonRedisSerializer);//hash的value采用上面定义的json序列化方式
template.afterPropertiesSet();
return template;
}
}
使用fastjson,需要自己导入包
@Configuration
public class redisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
//为了开发方便,我们一般创建String类型的redis模板
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(redisConnectionFactory);
template.setKeySerializer(new StringRedisSerializer()); //key采用String的序列化方式
template.setHashKeySerializer(new StringRedisSerializer());//hash的key采用String的序列化方式
template.setHashValueSerializer(new FastJsonRedisSerializer(Object.class));//hash的value采用json序列化方式
template.setValueSerializer(new FastJsonRedisSerializer(Object.class));//value采用json序列化方式
template.afterPropertiesSet();
return template;
}
}
封装工具类
package com.govd.utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@Component
public class RedisUtil {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
/**
* 指定缓存失效时间
*
* @param key 键
* @param time 时间(秒)
*/
public boolean expire(String key, long time, TimeUnit timeUnit) {
try {
if (time > 0) {
redisTemplate.expire(