【发布时间】:2021-09-20 16:44:17
【问题描述】:
我有一个 redis 队列和节点应用程序,它正在将项目插入队列。它们只是 JSON 字符串。我为此使用了bee-queue npm 包。
出于调试的目的,如果有办法查看当前队列中等待使用 redis cli 处理的项目会很好吗?
127.0.0.1:6379> keys *
1) "bq:myqueue:waiting"
2) "bq:myqueue:jobs"
3) "bq:myqueue:id"
我可以看到里面有物品
127.0.0.1:6379> llen bq:myqueue:waiting
(integer) 2
但我似乎无法真正看到它们:
127.0.0.1:6379> get bq:myqueue:waiting
(error) WRONGTYPE Operation against a key holding the wrong kind of value
当我使用LRANGE 列出数据时,我得到了这个:
127.0.0.1:6379> LRANGE bq:myqueue:waiting 0 3
1) "9"
2) "8"
3) "7"
根据我在使用 node.js 客户端处理这些项目时看到的数据,这些是 redis 分配给队列中项目的 id,但它不是我实际放入的 JSON 数据排队。
【问题讨论】:
-
看看我的更新,但这似乎返回队列中项目的 ID,而不是实际数据。不确定这是否重要,但我正在使用 npm 包 bee-queue 将项目从节点应用程序插入队列。我没有使用 redis-cli 手动插入它们。
-
LRANGE返回列表中的实际元素,所以我想知道bq:myqueue:waiting中的元素是否引用了bq:myqueue:jobs或bq:myqueue:id中的索引。例如,如果waiting列表中的“9”是jobs列表中某物的索引。您可以使用LINDEX检索具有特定索引的项目,例如LINDEX bq:myqueue:jobs 9 -
这样做确实有意义,因为一个列表可能包含实际数据,而其他列表可能包含对应用程序有意义的作业 ID,然后是排序列表(@987654345 @list 似乎是)按它们应该工作的顺序保存实际作业数据的索引。
jobs和ids也可能不是 LISTS,因此您可以使用TYPE命令来识别它们。 -
是的,我尝试使用
LRANGE和LINDEX检查其他两个键(:jobs和:ids),但它们都返回WRONGTYPE Operation against a key holding the wrong kind of value。我开始怀疑这是不可能的。如果bee-queue 支持查看队列项目而不实际处理它们,也许我可以编写自己的客户端。