4

次のようなリストがある場合、方法はありますか?

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

モロッコがこのリストの1位にあることを確認する方法はありますか?

4

1 に答える 1

2

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 を返します。

于 2013-03-22T09:31:52.490 に答える