127.0.0.1:6379> keys * 1) "\xac\xed\x00\x05t\x00\x04pass" 2) "\xac\xed\x00\x05t\x00\x04name" 3) "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; } }
redis图形链接工具:https://gitee.com/qishibo/AnotherRedisDesktopManager/releases