700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 解决Spring Boot 使用RedisTemplate 存储键值出现乱码 \xac\xed\x00\x05t\x00

解决Spring Boot 使用RedisTemplate 存储键值出现乱码 \xac\xed\x00\x05t\x00

时间:2020-10-03 11:46:40

相关推荐

解决Spring Boot 使用RedisTemplate 存储键值出现乱码 \xac\xed\x00\x05t\x00

最近使用spring-data-redis RedisTemplate 操作redis时发现存储在redis中的key不是设置的string值,前面还多出了许多类似\xac\xed\x00\x05t\x00这种字符串,如下

127.0.0.1:6379> keys *

“\xac\xed\x00\x05t\x00\x04pass”“\xac\xed\x00\x05t\x00\x04name”“name”

spring-data-redis的RedisTemplate<K, V>模板类在操作redis时默认使用JdkSerializationRedisSerializer来进行序列化,如下

private boolean enableDefaultSerializer = true;

private RedisSerializer<?> defaultSerializer = new JdkSerializationRedisSerializer();

private RedisSerializer keySerializer = null;

private RedisSerializer valueSerializer = null;

private RedisSerializer hashKeySerializer = null;

private RedisSerializer hashValueSerializer = null;

解决方法:更改序列化方式

private RedisTemplate redisTemplate;

@Autowired(required = false)

public void setRedisTemplate(RedisTemplate redisTemplate) {

RedisSerializer stringSerializer = new StringRedisSerializer();

redisTemplate.setKeySerializer(stringSerializer);

redisTemplate.setValueSerializer(stringSerializer);

redisTemplate.setHashKeySerializer(stringSerializer);

redisTemplate.setHashValueSerializer(stringSerializer);

this.redisTemplate = redisTemplate;

}

补充:也可直接使用 StringRedisTemplate ,下附redis的缓存配置,可做参考

/**

===================================

描 述 : Redis + Spring Cache 整合增强

包 名 : top.qinxq.single.config

创建人 : qinxq

===================================

*/

@Configuration

@EnableCaching

@SuppressWarnings(“unchecked”)

public class RedisCacheConfig extends CachingConfigurerSupport {

@Value("${redis.cache.expiration:60}")

private long expiration;

@Bean

CacheManager cacheManager(RedisConnectionFactory connectionFactory) {

// 配置序列化(解决乱码的问题)

RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()

.entryTtl(Duration.ofSeconds(expiration))

.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerialize()))

.disableCachingNullValues();

return RedisCacheManager.builder(connectionFactory).cacheDefaults(config).build();

}

@Bean

public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {

StringRedisTemplate template = new StringRedisTemplate(factory);

template.setValueSerializer(jackson2JsonRedisSerialize());

template.afterPropertiesSet();

return template;

}

private Jackson2JsonRedisSerializer jackson2JsonRedisSerialize(){

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);

return jackson2JsonRedisSerializer;

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。