我有一个列表 {候选人ID,投票者ID} 作为“ backendService ”的传入请求。
此后端服务检查是否尚未将表决者ID投票给任何候选人编号,如果是,它将如下所示增加缓存中的候选人编号计数:
| CandidateId |计数|
| ABC | 5 |
| XYZ | 10 |
| MNO | 100 |
上述方法的问题是,如果我们将“ backendService”扩展到3-4个实例,并且相同的表决者ID尝试对许多候选对象进行投票(如传入请求以下),并且以下所有对象都在同一时间出现:
{ candidateId : 1, voterId : "ABC"}
{ candidateId : 2, voterId : "ABC"}
{ candidateId : 3, voterId : "ABC"}
每个“ backendService”都将选择上述请求之一进行处理。
在这种情况下,所有3个实例都会检查VoterID是否尚未同时投票给缓存中的任何候选人(正在存储已经投票的选民的ID的位置),那么所有3个服务实例都会错误地同时更新由缓存中相同的选民ID投射的所有3个候选ID的计数,这是错误的。
我正在寻找有关如何避免此类情况的解决方案。
当前所有详细信息都存储在分布式缓存(REDIS)中。