我可能会在某些时候建立自己的,但与此同时;是否存在语言通用事件调度程序 - 例如:{time, priority, action}
作为输入 - 可在分片之间分发,并支持:
delete_queue
的第二优先级队列正在查看Redis,但无法为其找到合适的优先级队列接口。
答案 0 :(得分:0)
我认为您不能使用Redis实现这样的队列,并且您为每个操作描述了确切的复杂性假设。
使用Redis可以使用zset。在内部,zset实现为标准哈希表和跳过列表(按分数和值排序)。因此,您可以使用分数来存储时间戳,并使用值来编码优先级和操作。 zset中的顺序首先是得分,然后是值本身(按字典顺序比较)。因此,我们的想法是选择一个值表示,其字典顺序对应于优先级所需的逻辑顺序。在这里,我假设时间优先于优先级(即优先级仅用于在具有相同时间戳的项目时对其进行排序)。
例如:
# timestamp=0, priority=3
zadd myqueue 0 03-action1
# timestamp=10, priority=2
zadd myqueue 10 02-action3
# timestamp=10, priority=1
zadd myqueue 10 01-action2
# The dequeuing order will be action1,action2,action3
# (because of priorities)
我相信各种操作的复杂性将是:
它们与您所寻找的不同,但它们并不是那么糟糕。