如果我有一个如下列表,那有什么办法吗?
rpush "country", "Mexico"
rpush "country", "Morocco"
rpush "country", "M'erica"
有没有办法看到摩洛哥在这份名单的第一位?
答案 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。