我是靠谱客的博主 唠叨泥猴桃,最近开发中收集的这篇文章主要介绍SpringBoot中使用Redis,并且指定存放到Redis中的数据的序列化方式。1SpringBoot 整合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;
}
}
最后
以上就是唠叨泥猴桃为你收集整理的SpringBoot中使用Redis,并且指定存放到Redis中的数据的序列化方式。1SpringBoot 整合Redis的全部内容,希望文章能够帮你解决SpringBoot中使用Redis,并且指定存放到Redis中的数据的序列化方式。1SpringBoot 整合Redis所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复