tra*_*boy 2 concurrency nosql redis node.js
我正在构建类似延迟行的东西:一个进程将对象放入一个列表中,另一个LPOP以相同的顺序出现.
诀窍是,对象只应在添加后一小时从列表中弹出.我可以使用时间戳.所有项目的延迟都是相同的,永远不会改变.
现在我如何以并发友好的方式实现pop(这样当几个worker访问该列表时它仍然有效)?我可以取出一个项目,检查时间戳并将其放回列表中,如果它还为时尚早.但如果几个工人同时这样做,可能会破坏物品的顺序.我可以检查第一个项目,只有在它到期时才弹出它.但是另一个工人可能已经弹出它然后我弹出错误的一个.
我应该使用WATCH命令吗?怎么样?我应该使用排序集而不是列表吗?帮助赞赏!
我建议使用排序集.条目进入zset,正常标识符为键,Unix样式时间戳作为分数.使时间戳为日期+时间,之后每个条目都准备好进行解析.工人做了一个ZPOP,这不是内置的,但可以用以下方式模拟:
MULTI
ZRANGE <key> 0 0 WITHSCORES
ZREMRANGEBYRANK <key> 0 0
EXEC
捕获结果,ZRANGE你得到的分数最低的元素已经从集合中删除了它的分数.如果它还没有用,请把它放回去ZADD <key> <score> <item>.  
| 归档时间: | 
 | 
| 查看次数: | 1345 次 | 
| 最近记录: |