我是靠谱客的博主 唠叨泥猴桃,这篇文章主要介绍SpringBoot中使用Redis,并且指定存放到Redis中的数据的序列化方式。1SpringBoot 整合Redis,现在分享给大家,希望可以做个参考。
1SpringBoot 整合Redis
修改全局配置文件,配置Redis服务器的地址和端口
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#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 源码配置方式
复制代码
1
2
3
4
5
6
7
8
9
10@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中的配置类
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26@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 源码的配置方式
复制代码
1
2
3
4
5
6
7
8
9@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字符串格式
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23@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; } }
最后
以上就是唠叨泥猴桃最近收集整理的关于SpringBoot中使用Redis,并且指定存放到Redis中的数据的序列化方式。1SpringBoot 整合Redis的全部内容,更多相关SpringBoot中使用Redis,并且指定存放到Redis中的数据的序列化方式。1SpringBoot内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复