【问题标题】:Can the redis cli show me items waiting in queue?redis cli 可以显示队列中等待的项目吗?
【发布时间】: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 数据排队。

【问题讨论】:

  • 由于命令 llen 返回了一个值(而不是错误),这意味着带有您的键的项目是 List 所以您需要使用列表命令来查看里面的内容. GETSET 等不适用于列表(或大多数其他数据类型)。 LRANGE 是您最好的选择,但您需要列表的长度才能使用它。根据您的帖子,我们假设长度为两个:LRANGE bq:myqueue:waiting 0 2,这意味着“返回列表中的元素 bq:myqueue:waiting,从元素 0 开始并检索 2 个元素”
  • 看看我的更新,但这似乎返回队列中项目的 ID,而不是实际数据。不确定这是否重要,但我正在使用 npm 包 bee-queue 将项目从节点应用程序插入队列。我没有使用 redis-cli 手动插入它们。
  • LRANGE 返回列表中的实际元素,所以我想知道bq:myqueue:waiting 中的元素是否引用了bq:myqueue:jobsbq:myqueue:id 中的索引。例如,如果waiting 列表中的“9”是jobs 列表中某物的索引。您可以使用LINDEX 检索具有特定索引的项目,例如LINDEX bq:myqueue:jobs 9
  • 这样做确实有意义,因为一个列表可能包含实际数据,而其他列表可能包含对应用程序有意义的作业 ID,然后是排序列表(@987654345 @list 似乎是)按它们应该工作的顺序保存实际作业数据的索引。 jobsids 也可能不是 LISTS,因此您可以使用 TYPE 命令来识别它们。
  • 是的,我尝试使用 LRANGELINDEX 检查其他两个键(:jobs:ids),但它们都返回 WRONGTYPE Operation against a key holding the wrong kind of value。我开始怀疑这是不可能的。如果bee-queue 支持查看队列项目而不实际处理它们,也许我可以编写自己的客户端。

标签: redis queue


【解决方案1】:

看起来亚当马歇尔检查类型的想法是正确的。事实证明,bq:myqueue:jobs 是一个哈希,因此您可以使用hash commands 来探索内容。例如

127.0.0.1:6379> TYPE bq:myqueue:jobs
hash

127.0.0.1:6379> HGKEYS bq:myqueue:jobs
 1) "11"
 2) "9"
 3) "4"

127.0.0.1:6379> HGET bq:myqueue:jobs "4"
"{"data":{"a":1001, "b": "four"},"options":{"timestamp":1632162180724,"stacktraces":[]},"status":"created","progress":0}"

127.0.0.1:6379> HGETALL bq:myqueue:jobs
 1) "11"
 2) "{"data":{"a":1, "b": "two"},"options":{"timestamp":1632162260037,"stacktraces":[]},"status":"created","progress":0}"
 3) "9"
 4) "{"data":{"a":99, "b": "three"},"options":{"timestamp":1632189454151,"stacktraces":[]},"status":"created","progress":0}"
 5) "4"
 6) "{"data":{"a":1001, "b": "four"},"options":{"timestamp":1632162180724,"stacktraces":[]},"status":"created","progress":0}"

格式有点不尽人意,但我认为基本上可以。

【讨论】:

    猜你喜欢
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-18
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多