Redisコレクションタイプの共通コマンドのまとめ

5049 ワード

集合タイプの説明
集合タイプもredisの比較的高い価値を体現するタイプである.Redisの集合タイプのため,Redisでは差分演算,交差演算,並列演算を容易に実行できる.
まず、集合タイプとリストタイプの違いを紹介しますが、実際にオブジェクト向けの言語を学んだことがある人は、これらのタイプがどんな違いがあるか推測できるはずです.
①コレクションタイプもリストタイプも2^32-1文字列格納可能
②集合タイプは無秩序であり、リストタイプは秩序である
③集合タイプは一意であり、リストタイプの値は一意ではない
文法を見てみましょう.
1、削除要素の追加コマンド

sadd key member [member ...]
srem key member [member ...]
saddコマンドは、集合に要素を追加するために使用されます.もちろん、前の学習経験に基づいて、集合が存在しない場合は、自動的に作成されます.しかし、ここで注意しなければならないのは、要素がすでに存在する場合、上書きせずに無視されます.戻り値は、要素が正常に追加された数です(無視された要素は計算されません).sremコマンドも同様です.要素を削除します.要素が存在する場合、削除に成功します.戻り値は、削除に成功した要素の数です.
2、コレクション内のすべての要素を取得する

smembers key

3、要素が集合中かどうかを判断する

sismember key member

この判断操作の時間的複雑さはO(1)であり,集合中の要素がいくらあっても,このコマンドは常に結果を迅速に返す.存在は1を返し、存在しない場合やこのキーがない場合は0を返します.
4、集合間演算

sdiff key [key ...]
sinter key [key ...]
sunion key [key ...]

この3つの命令はRedisを活躍させることができる!
まずテストデータを用意します.

127.0.0.1:6379> sadd setA 1 2 3
(integer) 3
127.0.0.1:6379> sadd setB 2 3 4
(integer) 3
127.0.0.1:6379> sadd setC 3 4 5
(integer) 3

127.0.0.1:6379> smembers setA 
1) "1"
2) "2"
3) "3"
127.0.0.1:6379>

(1)sdiff命令について説明するが,この命令は実際には差分演算である.
集合Aと集合Bとの差分演算はA-Bとして表され、Aに属し、Bに属さないすべての要素からなる集合を表す.このコマンドは、AとBが先に差集演算を行い、結果としてCと差集演算を行うことを意味する複数のキーの入力を同時にサポートします.

127.0.0.1:6379> sdiff setA setB
1) "1"
127.0.0.1:6379> sdiff setB setC
1) "2"
127.0.0.1:6379> sdiff setA setB setC
1) "1"

(2)次に、複数の集合に対して交差演算を実行するためのsinterコマンドについて説明する.集合Aと集合Bとの交差は、A∩B、すなわち、Aに属しBに属するすべての要素からなる集合として表される.このコマンドは、複数のキーの転送も同時にサポートされ、同様に、一歩一歩交差演算を行います.

127.0.0.1:6379> sinter setA setB
1) "2"
2) "3"
127.0.0.1:6379> sinter setA setB setC
1) "3"

(3)最後に,並列演算コマンドsunionについて説明する.集合Aと集合Bの並びは、AにもBにも属する集合を意味する.複数のキー入力もサポートされています.

127.0.0.1:6379> sunion setA setB
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> sunion setA setB setC
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

5、取得集合中の要素の個数

scard key
127.0.0.1:6379> scard setA
(integer) 3
127.0.0.1:6379> scard setB
(integer) 3

このコマンドは、コレクション内の要素の数を取得するために使用します.同じコレクションが存在しない場合は0を返します.
6、集合演算を行い、結果を記憶する

sdiffstore destination key [key ...]
sinterstore destination key [key ...]
sunionstore destination key [key ...]

ここでは,すべての集合命令の後にstoreを加え,記憶の意味であることが明らかになった.destinationは目的地、つまり私たちが保存するキー名です.
例:

127.0.0.1:6379> sunionstore setAll setA setB setC
(integer) 5
127.0.0.1:6379> smembers setAll
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

7、集合中の要素をランダムに取得する

srandmember key [count]

 
このコマンドはランダムに集合から1つの要素を取得するために使用され、countパラメータは1語で複数の要素を取得するために使用され、countの正負によって異なる意味を持つ.
(1)countが正数である場合、count個の重複しない要素を取得し、countがすべての値の個数より大きい場合、すべての要素を返す.
(2)負の値の場合,|count|個の要素が得られるが,同じである可能性がある.
実はこのランダムは非常にランダムではありません.実際にredisの集合はハッシュのストレージ構造を使っているので、興味のある読者は自分で深く研究することができます.

127.0.0.1:6379> srandmember setA 1
1) "1"
127.0.0.1:6379> srandmember setA 2
1) "3"
2) "2"
127.0.0.1:6379> SRANDMEMBER setA 5
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SRANDMEMBER setA -2
1) "3"
2) "3"

8、集合から要素をポップアップする

spop key

以前もlpopとrpopを見たことがありますが、それはリストからポップアップされますが、集合は無秩序なのでspopはランダムにポップアップされます.(ポップアップされた要素は削除され、元のコレクションには含まれません)

127.0.0.1:6379> spop setA 1
1) "2"
127.0.0.1:6379> smembers setA
1) "1"
2) "3"

次に、集合の具体的な応用を例に挙げます.
私たちの文章に格納されているときにラベルtagがあります.これは、リレーショナル・データベースで中間テーブル関連付けを使用する必要があります.しかし、Redisでは、私たちは簡単に処理することができます.
各記事について、post:記事ID:tagsのキーを使用します.タイプは集合で、記事が属するtagsを格納します.これにより、自身のリレーショナル・データベースには、記事テーブル、ラベルテーブル、中間リレーショナル・テーブルの3つのテーブルを関連付ける複雑な操作が必要になり、Redisでは便利になります.
指定されたラベルのすべての文章を取得する必要がある場合もあります.tag:ラベル名:postsの集合タイプキーを追加し、各ラベルの文章IDの集合を格納する必要があります.これにより、あるラベルに属するすべての文章リストを取得するたびに、リレーショナル・データベースのように多くのテーブルを関連付けるのではなく、キーを介して直接取得することができます.
Javaとredisのラベルを同時に持つ文章を取得したい場合は、tag:java:poststag:redis:postsを交差演算するだけでOKですが、便利ではないでしょうか.
まとめ
以上はこの文章のすべての内容で、みんなの学习あるいは仕事に対して一定の助けをもたらすことができることを望んで、もし疑问があればみんなは伝言を残して交流することができます.