4

如果我有一个清单,例如:

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

有什么办法可以看出摩洛哥在这个名单的第 1 位?

4

1 回答 1

2

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

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

在客户端:

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

在服务器端:

您可以使用Lua 服务器端脚本来实现线性搜索。这是一个例子:

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。

于 2013-03-22T09:31:52.490 回答