7

リストに値を追加しようとしていますが、まだ追加されていない場合のみです。

これを行うコマンドはありますか、またはリスト内の値の存在をテストする方法はありますか?

ありがとう!

4

7 に答える 7

10

私も同じことをする必要があります。リストから要素を削除してから、再度追加することを考えています。要素がリストにない場合、redis は 0 を返すため、エラーは発生しません

lrem mylist 0 myitem
rpush mylist myitem 
于 2015-05-20T09:21:28.607 に答える
9

Tommaso Barbugli が述べたように、一意の値のみが必要な場合は、リストの代わりにセットを使用する必要があります。 REDIS のドキュメントを参照 SADD

redis>  SADD myset "Hello"
(integer) 1
redis>  SADD myset "World"
(integer) 1
redis>  SADD myset "World"
(integer) 0
redis>  SMEMBERS myset
1) "World"
2) "Hello"

セット内の値の存在を確認したい場合は、SISMEMBERを使用できます。

redis>  SADD myset "one"
(integer) 1
redis>  SISMEMBER myset "one"
(integer) 1
redis>  SISMEMBER myset "two"
(integer) 0
于 2016-02-25T21:30:17.523 に答える
2

セットまたはソートされたセットが必要なようです。

セットには O(1) メンバーシップ テストがあり、一意性が強制されます。

于 2013-05-18T09:50:39.177 に答える
1

リスト内にメンバーが存在するかどうかをチェックするのは O(n) です。これは、大きなリストでは非常にコストがかかる可能性があり、間違いなく理想的ではありません。そうは言っても、他の誰もがあなたに選択肢を与えているようです。私は、あなたが求めていることをどのように実行するかを説明するだけであり、あなたがその方法でそれを実行する正当な理由があると仮定します. rと呼ばれる Redis への接続、 と呼ばれるいくつかのリスト、some_listおよび と呼ばれる追加するいくつかの新しい項目があると仮定して、私は Python でそれを行いますnew_item:

lst = r.lrange(list_name, -float('Inf'), float('Inf'))
if new_item not in lst:
     r.rpush(list_name, new_item)
于 2013-05-18T20:05:06.203 に答える