解决Spring Boot 使用RedisTemplate 存储键值出现乱码
java redis存储键值包含xacxedx00x05tx00特殊字符
java RedisTemplate操作redis后,想看一下是否成功,
就redis-cli执行:keys *
1) "xacxedx00x05tx00x04name" 2) "a" 3) "siteName" 4) "xacxedx00x05tx00bsiteName" 5) "myCache::userName"
发现存储键值包含xacxedx00x05tx00特殊字符。
原因:RedisTemplate<K, V>模板类在操作redis时默认使用JdkSerializationRedisSerializer来进行序列化。
spring-data-redis的RedisTemplate<K, V>模板类在操作redis时默认使用JdkSerializationRedisSerializer来进行序列化。
public void afterPropertiesSet() { super.afterPropertiesSet(); boolean defaultUsed = false; if (defaultSerializer == null) { defaultSerializer = new JdkSerializationRedisSerializer( classLoader != null ? classLoader : this.getClass().getClassLoader()); } if (enableDefaultSerializer) { if (keySerializer == null) { keySerializer = defaultSerializer; defaultUsed = true; } if (valueSerializer == null) { valueSerializer = defaultSerializer; defaultUsed = true; } if (hashKeySerializer == null) { hashKeySerializer = defaultSerializer; defaultUsed = true; } if (hashValueSerializer == null) { hashValueSerializer = defaultSerializer; defaultUsed = true; } } if (enableDefaultSerializer && defaultUsed) { Assert.notNull(defaultSerializer, "default serializer null and not all serializers initialized"); } if (scriptExecutor == null) { this.scriptExecutor = new DefaultScriptExecutor<K>(this); } initialized = true; }
这是因为存取序列化的方式为org.springframework.data.redis.serializer.JdkSerializationRedisSerializer
将序列化的方式改为 org.springframework.data.redis.serializer.StringRedisSerializer 会自动去掉xacxedx00x05tx00前缀
解决:方案1 使用 StringRedisTemplate
@Autowired private StringRedisTemplate stringRedisTemplate;
方案2 修改默认的序列化方式:
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; }
将redisTemplate默认改为stringRedis序列化方式。
相关知识
解决Spring Boot 使用RedisTemplate 存储键值出现乱码
Spring Boot开发的植物健康管理系统研究
Java实现鲜花预定系统:Oracle数据库与Spring Boot框架整合实战
Spring Boot + Vue的网上商城之客服系统实现
Spring Boot 实战篇(五):优化用户登录与注册功能(密码加密与校验)
Spring Boot:植物健康监测的智能专家
基于spring boot的假花加工和运输管理系统的设计与实现怎么实现加工
Spring Boot集成微信支付JSAPIV3保姆教程
spring boot使用内嵌的tomcat解决不安全的HTTP方法安全漏洞
spring boot 时区问题
网址: 解决Spring Boot 使用RedisTemplate 存储键值出现乱码 https://www.huajiangbk.com/newsview2512427.html
| 上一篇: 柚子树可以在室内养吗(柚子树可以 |
下一篇: JSX语法使用详解——终极版 |
推荐分享
- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039
