当前位置: 首页 > 知识库问答 >
问题:

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

巢睿
2024-02-20

Springboot 项目使用 RMapCache 保存数据,发现值出现 \x00

image.png
\#1 使用 StringRedisTemplate 保存数据,可用
\#2 使用 RMapCache 保存数据, 出现\x00, 不可用

大致结构如下
demo project
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
然后将脚本放到 redis-cli 直接执行,数据也是异常的

eval "return struct.pack('dLc0', 0, string.len(ARGV[1]), ARGV[1])" 0 "test"

image.png

我要怎么修改

共有1个答案

夏青青
2024-02-20

首先,让我们来分析这个问题。

从你给出的信息中,当使用 RMapCache 保存数据时,值中出现了 \x00。这很可能是由于编码问题导致的。\x00 是一个特殊的字符,在 Redis 中通常用作命令的分隔符。

以下是一些建议的解决步骤:

  1. 检查序列化/反序列化:确保你使用的是正确的序列化/反序列化方式。JsonJacksonCodecStringCodec 都可以工作,但要确保它们与你的数据结构兼容。
  2. Lua 脚本问题:你提到在执行 Lua 脚本后数据出现了问题。Lua 脚本在 Redis 中执行时,它会接收一个或多个参数,并且返回一个或多个结果。确保 Lua 脚本正确处理了参数,并返回了预期的结果。
  3. 编码问题:考虑使用 StringRedisTemplate 来保存数据,因为它是为字符串设计的,可能避免了编码问题。如果你必须使用 RMapCache,确保你了解其内部的工作原理,并考虑使用其他序列化/反序列化方式。
  4. 版本兼容性:确保你的 Spring Boot、Redisson 和 Redis 的版本是兼容的。有时,库的新版本可能修复了旧版本中的问题。
  5. 日志和调试:增加日志记录,特别是与序列化、反序列化和 Lua 脚本执行相关的部分。这可以帮助你更好地理解问题所在。
  6. 社区和文档:查看 Redisson 的官方文档和社区论坛,看看是否有其他人遇到了类似的问题,或者是否有新的解决方案。
  7. 简化问题:尝试创建一个简化的示例项目,只包含最基本的设置和功能,看是否还会出现相同的问题。这可以帮助你确定问题是特定于你的项目配置还是更普遍的问题。

希望这些建议能帮助你解决问题!如果你有更多的代码或错误信息,也可以提供给我,我会尽量为你提供更具体的帮助。

 类似资料:
  • 嗨,我有一个角色表和一个权限表,它有多对多的关系。我已经创建了下面链接中提到的实体 https://www.baeldung.com/jpa-多对多 角色实体 权限实体 我已经为每个实体创建了JPA存储库,并且正在尝试将权限保存给一个角色。我在表中已经有了一组/列表的权限,我正在尝试将它们映射到某个角色。我正在尝试使用spring JPA存储库执行下面的代码。 在执行我得到的代码时 org.hib

  • 我使用的是spring boot 1.2.8,但类不存在。没有这门课最好的方法是什么?

  • SpringBoot项目本地运行测试一切正常,Jar包在本地运行也正常,当打包后传到 Linux 系统上,项目启动也没有问题,但是在前端发送请求后,发生了 Caused by: java.lang.ClassNotFoundException: com.qsj.acojbackendmodel.entity.User,这个User路径是错误的 ,正常应该是:com.qsj.acoj.model.e

  • 本文向大家介绍SpringBoot项目在IntelliJ IDEA中如何实现热部署,包括了SpringBoot项目在IntelliJ IDEA中如何实现热部署的使用技巧和注意事项,需要的朋友参考一下 spring-boot-devtools是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。 原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止后再启动更

  • 本文向大家介绍SpringBoot+jsp项目启动出现404的解决方法,包括了SpringBoot+jsp项目启动出现404的解决方法的使用技巧和注意事项,需要的朋友参考一下 通过maven创建springboot项目启动出现404 application.properties配置 项目结构 控制器方法 启动项目访问localhost:8080,出现404 Whitelabel Error Pag

  • 本文向大家介绍SpringBoot使用Redis缓存的实现方法,包括了SpringBoot使用Redis缓存的实现方法的使用技巧和注意事项,需要的朋友参考一下 (1)pom.xml引入jar包,如下:   (2)修改项目启动类,增加注解@EnableCaching,开启缓存功能,如下:   (3)application.properties中配置Redis连接信息,如下:   (4)新建Redis