【发布时间】:2020-07-16 11:59:57
【问题描述】:
我有一个存储在 POJO (EquityFeeds) 中的数据(如下所示):
externalTransactionId,clientId,transactionType,transactionDate,marketValue,sourceSystem,priorityFlag,processingFee
SAPEXTXN1,GS,BUY,23/11/13,101.9,BLO,Y,0
SAPEXTXN2,AS,SELL,20/11/13,121.9,BLO,N,0
SAPEXTXN3,AP,DEPOSIT,19/11/13,120,BLO,Y,0
SAPEXTXN4,HJ,WITHDRAW,30/11/13,230,BLO,N,0
SAPEXTXN5,GS,WITHDRAW,26/11/13,330,BLO,Y,0
SAPEXTXN6,AP,SELL,25/11/13,100,BLO,Y,0
SAPEXTXN7,AS,BUY,06/11/13,121.1,BLO,N,0
我将数据存储在 REDIS 缓存中的主应用程序中。 代码:
@Override
public void saveClientId(EquityFeeds equityFeeds) {
System.out.println("Saving ClientId in RedisCache : "+equityFeeds.getClientId());
hashOperations.put("CLIENTID", equityFeeds.getClientId(), equityFeeds);
}
@Override
public List<EquityFeeds> findByClientId(String clientId) {
System.out.println("Client Id search in REDIS repository: "+clientId);
return (List<EquityFeeds>) hashOperations.multiGet("CLIENTID", Arrays.asList(clientId));
}
现在我制作了一个 REST 控制器来通过 REST API 获取数据 代码:
@GetMapping("/getByClientId/{clientId}")
public Optional<List<EquityFeeds>> getByClientId(@PathVariable("clientId") final String clientId) {
Optional<List<EquityFeeds>> cId = Optional.ofNullable(equityFeedsRedisRepositoryImpl.findByClientId(clientId));
if(cId.isPresent()) {
return cId;
} else {
cId.orElseThrow(() -> new RuntimeException("Client Id not found"));
}
return cId;
}
问题: 现在的问题是我可以有多个具有相同 clientId 的行,例如在上面显示的 csv 示例数据中,我有 2 条记录具有相同的 clientId 'AP'。我的要求是,当从浏览器调用 REST API 映射时,它应该显示具有给定 clientId 的多条记录。它应该显示所有的记录。
现在它只显示给定 clientId 的(单个)最后一条记录,这是可以理解的,因为根据哈希的概念,最后一条记录将覆盖前一条记录(因为 hashKey - 例如“AP”是相同的)并且它将显示一条且仅一条记录,该记录将是最新的。
现在如何解决这个问题?可以使用 hashOperations 解决吗?请提出解决上述要求的方法。
【问题讨论】:
-
你考虑过使用 Redis List 吗?
-
@Guy:谢谢。我正要写一篇详细说明我如何使用 Redis List 解决问题的帖子。我已经回答了我的问题,详细说明了我是如何解决上述问题的。