我们正在使用serviceA从数据库中提取数据并将其放入redis(我们正在使用Spring data / Jedis和saveAll方法)。
还有另一个serviceB需要从同一redis实例获取所有对象。
serviceA中对象的结构与serviceB完全相同。我们遇到了问题,因为serviceA的工作做得很好,但是service B使用Spring数据提供的findAll()方法提取了所有数据,但它们都是空值。
注意:我们进行了一次测试,从serviceB加载了所有数据,因此我们毫无疑问地获得了所有对象。从redis的两个哈希中可以看到的唯一区别是,当我们从serviceA加载数据时,字段_class会自动生成。
你能帮我吗?
答案 0 :(得分:0)
请确保在serviceA
和serviceB
之间对密钥进行序列化的方式上保持一致。对我来说,听起来serviceA
正在为给定的序列化密钥写入数据,然后serviceB
试图为另一个序列化的密钥获取数据。例如,如果您同时在'serviceA'和'serviceB'中使用Jackson,请确保其配置方式相同。
Redis本质上是分布式Map<String, String>
,因此如果serviceA
序列化数据的方式和serviceB
序列化数据的方式有所不同(例如,其中一个将类名存储在序列化对象,而另一个不存储它),您将为同一Java密钥对象得到不同的String
键(由于对findAll
的响应,读取数据的服务将为null)存储在Redis所请求的密钥中)。