通过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