次のようなリストがある場合、方法はありますか?
rpush "country", "Mexico"
rpush "country", "Morocco"
rpush "country", "M'erica"
モロッコがこのリストの1位にあることを確認する方法はありますか?
次のようなリストがある場合、方法はありますか?
rpush "country", "Mexico"
rpush "country", "Morocco"
rpush "country", "M'erica"
モロッコがこのリストの1位にあることを確認する方法はありますか?
O(n) 操作になるため、リスト内の特定の項目を検索するための Redis コマンドはありません。数千の項目を超えて拡張することはできません。
リストが十分に小さいことがわかっている場合は、この操作をクライアントまたはサーバー側で実装できます。
クライアント側:
ネットワーク帯域幅をあまり気にしない場合は、「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 を返します。