我有一个服务器,该服务器侦听队列并处理队列中的数据。
这是获取数据的逻辑:
BLPOP queue 60
if data found in queue:
LRANGE queue 0 9 //Fetch 10 more items
int size = queue.size()
LTRIM queue size -1 //Remove the items fetched by lrange
问题
该服务器的2个节点执行相同的任务,并且面临并发问题。
例如,在一个节点的BLPOP
和另一节点的LRANGE
中检索同一元素,这导致处理重复。
一种解决方法是在MULTI
EXEC
部分中放置LRANGE
LTRIM
。
但是我有几个问题:
LTRIM
的价值,我如何LRANGE
仅提取交易中的物品?LRANGE
来自另一个节点的BLPOP
吗?