通过Redis列表中的值获取项目的索引

我有一个已创建的Redis列表,此刻我将它用作队列,偶尔会反向。我的问题是我希望能够按值获取该队列/列表上某项的索引。

如果我具有以下值的列表:

{"dan","eduardo","pedro"}

索引将是:

0 : "dan"

1 : "eduardo"

2 : "pedro"

我希望能够通过传递值来获取列表中该值的索引。

像“ eduardo”一样,返回“ 1”。

如果可以的话,那怎么可能呢?

我还应该说的是,我正在对列表执行队列命令,从顶部删除项目,然后在底部添加项目。

我目前正在使用node.js 0.6.6和最新的redis模块以及最新的redis版本2.4.4。

我为redis-cli中的解决方案感到高兴。

此外,没有其他限制,那么必须可以单独使用redis进行操作,没有外部进程等,但是如果要对lua go使用EVAL命令。

编辑

另外,我认为我的答案可能是在排序的集合上而不是队列上。

回答:

我不知道它的nodejs客户端详细信息,但是以下是lua中非常简单的indexOf命令的实现。

在我的文件中,indexof.lua我有以下代码:

local key = KEYS[1]

local obj = ARGV[1]

local items = redis.call('lrange', key, 0, -1)

for i=1,#items do

if items[i] == obj then

return i - 1

end

end

return -1

让我们将一些值推到mylist

> rpush mylist foo bar baz qux

(integer) 4

我们可以使用lua脚本在列表中找到任何值的索引。该命令为O(N)。

$ redis-cli --eval indexof.lua mylist , bar

(integer) 1

的索引bar为1

> lindex mylist 1

"bar"

的索引nil是-1

$ redis-cli --eval indexof.lua mylist , nil

(integer) -1

请参阅有关EVAL命令的http://redis.io/commands/eval其他文档。

以上是 通过Redis列表中的值获取项目的索引 的全部内容, 来源链接: utcz.com/qa/434228.html

回到顶部