从不同应用程序中从Redis读取数据

时间:2018-09-28 23:59:56

标签: java spring redis spring-data-jpa spring-data

我们正在使用serviceA从数据库中提取数据并将其放入redis(我们正在使用Spring data / Jedis和saveAll方法)。

还有另一个serviceB需要从同一redis实例获取所有对象。

serviceA中对象的结构与serviceB完全相同。我们遇到了问题,因为serviceA的工作做得很好,但是service B使用Spring数据提供的findAll()方法提取了所有数据,但它们都是空值。

注意:我们进行了一次测试,从serviceB加载了所有数据,因此我们毫无疑问地获得了所有对象。从redis的两个哈希中可以看到的唯一区别是,当我们从serviceA加载数据时,字段_class会自动生成。

你能帮我吗?

1 个答案:

答案 0 :(得分:0)

请确保在serviceAserviceB之间对密钥进行序列化的方式上保持一致。对我来说,听起来serviceA正在为给定的序列化密钥写入数据,然后serviceB试图为另一个序列化的密钥获取数据。例如,如果您同时在'serviceA'和'serviceB'中使用Jackson,请确保其配置方式相同。

Redis本质上是分布式Map<String, String>,因此如果serviceA序列化数据的方式和serviceB序列化数据的方式有所不同(例如,其中一个将类名存储在序列化对象,而另一个不存储它),您将为同一Java密钥对象得到不同的String键(由于对findAll的响应,读取数据的服务将为null)存储在Redis所请求的密钥中)。