GETJOB
- GETJOB [TIMEOUT <ms-timeout>] [COUNT <count>] FROM queue1 queue2 ... queueN
从给定的队列里面取出可用的任务,或者在超时时间达到时,返回 NULL
。
在默认情况下,命令每次最多只会返回一个任务,但使用 COUNT count
选项可以指定每次最多可以获取的任务数量。
任务会以数组的形式被返回,每个任务由三个元素组成:
- 任务所在的队列。
- 任务的 ID 。
- 任务的内容。
如果用户给定了多个队列,那么命令将按照队列被给定的顺序,从左到右地对它们进行处理。
如果给定的队列没有任务可以返回,那么执行命令的客户端将被阻塞,执行命令的节点会与其他节点进行消息交换,以便将可能存在的任务移动到这个节点里面,从而尽快地将任务返回给被阻塞的客户端。
- disque> ADDJOB greeting "hello world!" 0 -- 将三个任务放进队列里面
- DI216f7fa17693623ffb3bd8b0902e134f4ab6a5d305a0SQ
- disque> ADDJOB greeting "good morning!" 0
- DI216f7fa16a8e4a7428b18c2b0ec180963795b0b705a0SQ
- disque> ADDJOB greeting "bye bye~" 0
- DI216f7fa11413878f376588c85aca7c7fa22232f905a0SQ
- disque> GETJOB FROM greeting -- 依次地从队列里面取出三个任务
- 1) 1) "greeting" -- 任务来自 "greeting" 队列
- 2) "DI216f7fa17693623ffb3bd8b0902e134f4ab6a5d305a0SQ" -- 任务的 ID
- 3) "hello world!" -- 任务的内容
- disque> GETJOB FROM greeting
- 1) 1) "greeting"
- 2) "DI216f7fa16a8e4a7428b18c2b0ec180963795b0b705a0SQ"
- 3) "good morning!"
- disque> GETJOB FROM greeting
- 1) 1) "greeting"
- 2) "DI216f7fa11413878f376588c85aca7c7fa22232f905a0SQ"
- 3) "bye bye~"
- disque> GETJOB TIMEOUT 5000 FROM greeting -- 命令在等待 5000 毫秒之后返回
- (nil) -- 未取得任何任务
- (5.09s)
以下是使用 COUNT
选项一次返回多个任务的示例:
- disque> ADDJOB todo "finish homework" 0
- DIb47e59860656f0cfccc59f79e468b5ef4516d6a605a0SQ
- disque> ADDJOB todo "buy some milk" 0
- DIb47e5986173aae4f703877e1f4afedade0ca82b205a0SQ
- disque> ADDJOB todo "watch movie" 0
- DIb47e59866f34f9a38b868c28fe305baa9c1f688105a0SQ
- disque> GETJOB COUNT 3 FROM todo -- 一次返回三个任务
- 1) 1) "todo" -- 第一项任务
- 2) "DIb47e59860656f0cfccc59f79e468b5ef4516d6a605a0SQ"
- 3) "finish homework"
- 2) 1) "todo" -- 第二项任务
- 2) "DIb47e5986173aae4f703877e1f4afedade0ca82b205a0SQ"
- 3) "buy some milk"
- 3) 1) "todo" -- 第三项任务
- 2) "DIb47e59866f34f9a38b868c28fe305baa9c1f688105a0SQ"
- 3) "watch movie"