如果我有一个清单,例如:
rpush "country", "Mexico"
rpush "country", "Morocco"
rpush "country", "M'erica"
有什么办法可以看出摩洛哥在这个名单的第 1 位?
如果我有一个清单,例如:
rpush "country", "Mexico"
rpush "country", "Morocco"
rpush "country", "M'erica"
有什么办法可以看出摩洛哥在这个名单的第 1 位?
没有 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。