SpringBoot中使用Redis,并且指定存放到Redis中的数据的序列化方式。

1SpringBoot 整合Redis

修改全局配置文件,配置Redis服务器的地址和端口

#Redis服务器地址  
spring.redis.host=127.0.0.1 
#Redis服务器连接端口(redis默认端口是6379)
spring.redis.port=6379  
#Redis服务器连接密码(默认为空)  
spring.redis.password=1234
#Redis数据库索引(默认为0,可以填0-15中的值)  
spring.redis.database=0  
#连接池最大连接数(使用负值表示没有限制)  
spring.redis.pool.max-active=200  
#连接池最大阻塞等待时间(使用负值表示没有限制)  
spring.redis.pool.max-wait=-1  
#连接池中的最大空闲连接  
spring.redis.pool.max-idle=15
#连接池中的最小空闲连接  
spring.redis.pool.min-idle=1
#连接超时时间(毫秒)  
spring.redis.timeout=1000 

将Object存入Redis中,Springboot默认的是将Object对象转换为字节数组。如果需要转化为Json字符串格式存储到缓存中,需要自己编写配置类

1.1 SpringBoot1.X版本的配置类如下

1.1.1 源码配置方式

@Bean
public RedisCacheManager cacheManager(RedisTemplate<Object, Object> redisTemplate) {
    RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
    cacheManager.setUserPrefix(true);
    List<String> cacheNames = this.cacheProperties.getCacheNames();
    if (!cacheNames.isEmpty()) {
        cacheManager.setCacheNames(cacheNames);
    }
    return this.customizerInvoker.customize(cacheManager);
}

1.1.2将Object转换为Json字符串存储到Redis中的配置类

@Configuration
public class RedisConfig {
	//@Bean的作用,将方法返回对象放到spring容器中
	@Bean
	@SuppressWarnings("all")
	    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory factory) {
	        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<Object, Object>();
	        redisTemplate.setConnectionFactory(factory);
	        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
	        ObjectMapper om = new ObjectMapper();
	        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
	        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
	        jackson2JsonRedisSerializer.setObjectMapper(om);
	        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
	        // key采用String的序列化方式
	        redisTemplate.setKeySerializer(jackson2JsonRedisSerializer);
	        // hash的key也采用String的序列化方式
	        redisTemplate.setHashKeySerializer(jackson2JsonRedisSerializer);
	        // value序列化方式采用jackson
	        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
	        // hash的value序列化方式采用jackson
	        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
	        redisTemplate.afterPropertiesSet();
	        return redisTemplate;
	    }
}

 

1.2 SpringBoot 2.x版本的配置方式

 

SpringBoot1.x和SpringBoot2.x的配置方式有很大的不同

1.2.1 源码的配置方式

@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory, ResourceLoader resourceLoader) {
    RedisCacheManagerBuilder builder = RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(this.determineConfiguration(resourceLoader.getClassLoader()));
    List<String> cacheNames = this.cacheProperties.getCacheNames();
    if (!cacheNames.isEmpty()) {
        builder.initialCacheNames(new LinkedHashSet(cacheNames));
    }
    return (RedisCacheManager)this.customizerInvoker.customize(builder.build());
}

 

 

 

1.2.2  自定义配置类,将Object转换为Json字符串格式

@Configuration
public class RedisCacheConfig {
 	@Bean
    public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
         //初始化json的序列化方式
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
        RedisSerializationContext.SerializationPair<Object> pair = RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer);
        //设置 value 的序列化方式为 jackson2JsonRedisSerializer
        RedisCacheConfiguration defaultCacheConfig=RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(pair);
         //设置默认超过期时间是100秒
        //defaultCacheConfig = defaultCacheConfig.entryTtl(Duration.ofSeconds(seconds));
         //初始化RedisCacheWriter
        RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory);
        //初始化RedisCacheManager
        RedisCacheManager cacheManager = new RedisCacheManager(redisCacheWriter, defaultCacheConfig);       
        //解决查询缓存转换异常的问题 很重要
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        return cacheManager;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值