我们正在使用 serviceA 从数据库中提取数据并将其放入 redis(我们正在使用 Spring data/Jedis 和方法 saveAll)。
还有一个serviceB需要从同一个redis实例中获取所有对象。
serviceA 的对象结构与serviceB 完全相同。我们遇到问题,因为Servicea的工作正常,但是服务b用spring数据提供的方法findall()提取所有数据,但它们都是无效的。
注意:我们做了一个测试,从serviceB加载了所有的数据,所以我们得到了所有的对象,没有任何问题。我可以从 redis 上的两个哈希中看到的唯一区别是当我们从 serviceA 加载数据时自动生成的字段 _class。
你能给我一个人吗?
最佳答案
确保在 serviceA
之间序列化 key 的方式一致和 serviceB
.对我来说,这听起来像 serviceA
正在为给定的序列化 key 写入数据,然后是 serviceB
尝试为不同的序列化 key 获取数据。例如,如果您在“serviceA”和“serviceB”中都使用 Jackson,请确保以相同的方式配置它。
Redis 本质上是一个分布式 Map<String, String>
,所以如果serviceA
有差异序列化数据以及如何 serviceB
序列化数据(例如,其中一个将类名存储在序列化对象中,而另一个不存储它),您最终会得到不同的 String
相同 Java 键对象的键(并且读取数据的服务将得到 null 作为对 findAll
的响应,因为 Redis 中没有存储它请求的键)。
关于java - 从不同的应用程序读取 Redis 中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52563880/