如何在redis中获取列表中项目的位置?

时间:2013-03-21 23:18:39

标签: redis

如果我有一个如下列表,那有什么办法吗?

rpush "country", "Mexico"
rpush "country", "Morocco"
rpush "country", "M'erica"

有没有办法看到摩洛哥在这份名单的第一位?

1 个答案:

答案 0 :(得分:2)

没有Redis命令来搜索列表中的给定项,因为它将是O(n)操作。它不会超过几千个项目。

现在,如果您知道列表足够小,则可以在客户端或服务器端实现此操作。

在客户端:

如果您不太关心网络带宽,只需使用“lrange mylist 0 -1”获取整个列表,并在客户端中实现简单的线性搜索。

在服务器端:

您可以使用Lua server-side scripting来实施线性搜索。这是一个例子:

eval "local n = redis.call('LLEN', KEYS[1]) - 1
      for i=0,n do
         if redis.call( 'LINDEX', KEYS[1], i ) == ARGV[1] then
             return i
         end
      end
      return -1" 1 mylist item_to_search

此脚本将返回列表中项目的位置(从0开始),如果找不到该项目,则返回-1。