gpt4 book ai didi

java - 在REDIS缓存中保存/检索列表或记录

转载 作者:行者123 更新时间:2023-12-03 06:42:36 30 4
gpt4 key购买 nike

我有一个存储在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 Controller ,以通过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解决吗?请提出一种解决上述要求的方法。

最佳答案

我使用RedisList解决了上述问题。下面是代码:

private ListOperations listOperations;

public EquityFeedsRedisRepositoryImpl(RedisTemplate<String, EquityFeeds> redisTemplate) {
this.redisTemplate = redisTemplate;
this.hashOperations = redisTemplate.opsForHash();
this.listOperations = redisTemplate.opsForList();
}

@Override
public void saveClientId(EquityFeeds equityFeeds) {
System.out.println("Saving ClientId in RedisCache : "+equityFeeds.getClientId());
listOperations.rightPush(equityFeeds.getClientId(), equityFeeds);
}

@Override
public List<EquityFeeds> findByClientId(String clientId) {
System.out.println("Client Id search in REDIS repository: "+clientId);
return (List<EquityFeeds>) listOperations.range(clientId, 0, -1);
}

REST Controller通过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;
}

关于java - 在REDIS缓存中保存/检索列表或记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61026743/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com