Springboot 项目使用 RMapCache 保存数据,发现值出现 \x00,如何处理?-灵析社区

北北che

## Springboot 项目使用 RMapCache 保存数据,发现值出现 \x00 ![image.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241010/c07a13f3ed7f9750dc5a51cc416937b6.png) \\#1 使用 StringRedisTemplate 保存数据,可用 \\#2 使用 RMapCache 保存数据, 出现\x00, 不可用 大致结构如下 demo project [源码自取](https://link.segmentfault.com/?enc=SDcu1bJmwZZK7ajo28g%2BaQ%3D%3D.QOduvRZlGUnngtp4ZvQZhOM9ngbT2I7bsS%2F82T4I5268pjLvJJgOgybVP3UKfGx8) [测试视频](https://link.segmentfault.com/?enc=60wT4pLp7XYMTvcSf4UX9w%3D%3D.7jzF7t5DxkBd8WHwKDMURCBk4kFEDXpJUBXGYGz3svqZ9rLVfEUY4Pdo7PNn%2BAqS) springboot: 2.7.18 redisson: 3.26.1 / 3.21.0 redis: Redis-x64-5.0.14.1 / redis-5.0.5 redisson codec: JsonJacksonCodec / StringCodec 跟踪代码后发现,数据在执行lua脚本后出现了问题 ![image.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241010/d2257d1531ebf2ac4a7b673e590c1d4d.png) 然后将脚本放到 redis-cli 直接执行,数据也是异常的 eval "return struct.pack('dLc0', 0, string.len(ARGV[1]), ARGV[1])" 0 "test" ![image.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241010/b533cdef9529b8d058f1c57bcedffde4.png) 我要怎么修改 ===== 关于 RedisTemplate 序列化回复 ===== 我不知道为啥回复,刷新之后就消失了,再回复又重复,删除又两个都消失,在这里回复吧。 我并不是使用 RedisTemplate 来操作,而是使用的是 Redisson 的 RedissonClient 来进行操作 成功案例:直接使用 StringRedisTemplate ,demo 项目懒得配那么多,而且我也是成功了,上图#1 失败案例:使用 RMapCache mapCache = redissonClient.getMapCache(name); 我的错误发生在 使用 mapCache.put(key, value) 后 如果要设置,也是设置 redissonClient 的 Codec,我尝试过 JsonJacksonCodec 和 StringCodec,没有效果。原因,原问题有解释 ===== 关于 RedisTemplate 序列化回复 =====

阅读量:209

点赞量:0

问AI
"RedisTemplate" 如果不主动设置,默认使用的都是 "JdkSerializationRedisSerializer",换成 "GenericJackson2JsonRedisSerializer" 就好了。 @Configuration public class RedisTemplateConfig { @Bean public RedisTemplate redisTemplate() { redisTemplate.setDefaultSerializer(new GenericJackson2JsonRedisSerializer()); return redisTemplate; } } 或者 @Configuration public class RedisTemplateConfig { @Bean public GenericJackson2JsonRedisSerializer springSessionDefaultRedisSerializer() { return new GenericJackson2JsonRedisSerializer(); } } 补充 import com.fasterxml.jackson.databind.ObjectMapper; import org.redisson.client.codec.Codec; import org.redisson.codec.JsonJacksonCodec; import org.redisson.spring.starter.RedissonAutoConfiguration; import org.redisson.spring.starter.RedissonAutoConfigurationCustomizer; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class RedissonCustomizer { @Bean RedissonAutoConfigurationCustomizer redissonCustomizer() { ObjectMapper objectMapper = new ObjectMapper(); return configuration -> { Codec codecIns = new JsonJacksonCodec(objectMapper); configuration.setCodec(codecIns); }; } } 更新 用mapCache,是一定有这些特殊字符的,cache有最大存活时间。