Redisのデータ型の詳細

8900 ワード

文字列タイプ


文字列タイプと言いますが、中には数字もあります.
  • 文字列タイプkey
  • を作成
    127.0.0.1:6379> set name tom
    OK
    127.0.0.1:6379> get name
    "tom"
    127.0.0.1:6379> type name
    string
    
  • valueの末尾に文字列
  • を追加することもできる.
    string
    127.0.0.1:6379> append name qq
    (integer) 5
    127.0.0.1:6379> get name
    "tomqq"
    
  • はsetで1つのキー値ペアを設定ことができ、msetで1回に複数のキー値ペアを設定ことができ、mgetで複数のkeyの値
  • を1回に取得することができる.
    127.0.0.1:6379> mset name jerry age 2 addr hebei
    OK
    127.0.0.1:6379> mget name age addr
    1) "jerry"
    2) "2"
    3) "hebei"
    
  • strlenでkey文字列の長さ
  • を取得できます.
    127.0.0.1:6379> strlen name
    (integer) 5
    127.0.0.1:6379> strlen age
    (integer) 1
    
  • はincrのdecrを使用して値を1または1減らすことができるが、整数タイプでは
  • しか使用できないことに注意する必要がある.
    127.0.0.1:6379> set age 10
    OK
    127.0.0.1:6379> type age
    string
    127.0.0.1:6379> incr age
    (integer) 11
    127.0.0.1:6379> decr age
    (integer) 10
    
  • は、incrbyまたはdecrbyを使用して、自己増加または自己減少のたびに1ではなく、指定された値
  • を設定することもできる.
    127.0.0.1:6379> incrby age 3
    (integer) 13
    127.0.0.1:6379> decrby age 3
    (integer) 10
    

    ハッシュ・タイプ

  • redisのhashは、実はキー値ペアの集合
  • である.
  • hash毎に2^32-1個のキー値対
  • を格納することができる.
  • hsetおよびhgetを使用して、ハッシュタイプキー値ペアの値
  • を設定および取得することができる.
    127.0.0.1:6379> hset userinfo name cx
    (integer) 1
    127.0.0.1:6379> hset userinfo age 20
    (integer) 1
    127.0.0.1:6379> hset userinfo addr beijing
    (integer) 1
    127.0.0.1:6379> type userinfo
    hash
    127.0.0.1:6379> hget userinfo age
    "20"
    
  • hgetallを使用すると、ハッシュ内のすべてのキー値対
  • を返すことができる.
    127.0.0.1:6379> hgetall userinfo
    1) "name"
    2) "cx"
    3) "age"
    4) "20"
    5) "addr"
    6) "beijing"
    
  • hmsetおよびhmgetを使用して、複数のkeyに対応する値を一度に設定または取得することができる.
  • 127.0.0.1:6379> hmget userinfo name age
    1) "cx"
    2) "20"
    
  • は、keys *を使用してすべてのデータオブジェクトを表示し、delコマンドを使用してキー値ペア
  • を削除することができる.
    127.0.0.1:6379> keys *
    1) "name"
    2) "userinfo"
    127.0.0.1:6379> del name
    

    注意:delは削除するデータオブジェクトであり、例えばdel userinfoコマンドを実行するとuserinfoハッシュテーブル全体が削除され、ハッシュテーブルのキー値ペアを削除するにはhdel userinfo nameが必要である.

    リストの種類

  • リストの要素は、順序付き
  • です.
  • リストには最大2^32-1個のキー値対
  • が格納.
  • リストの要素は0から始まる
  • です.
  • リストは実は双方向(左L右R)
  • lpushは、リストのヘッダに1つ以上の値を挿入することができる(リストが存在しない場合、リストを作成する)
  • .
    127.0.0.1:6379> lpush citylist beijing shanghai guangzhou 
    (integer) 3
    
  • lrangeは、開始位置終了位置
  • を設定する必要があるリスト内の要素の一部を表示することができる.
    127.0.0.1:6379> lrange citylist 0 2
    1) "guangzhou"
    2) "shanghai"
    3) "beijing"
    
  • rpushはリストの末尾に要素
  • を追加することができる.
    127.0.0.1:6379> rpush citylist shenyang
    (integer) 4
    127.0.0.1:6379> lrange citylist 0 5
    1) "guangzhou"
    2) "shanghai"
    3) "beijing"
    4) "shenyang"
    
  • rpopは、リストの最後の要素を表示し、リストから
  • を削除することができる.
    127.0.0.1:6379> rpop citylist
    "shenyang"
    127.0.0.1:6379> lrange citylist 0 5
    1) "guangzhou"
    2) "shanghai"
    3) "beijing"
    
  • lpopは、リストのヘッダの要素を表示し、リストから削除することができる.llenは、リスト長
  • を返すことができる
    127.0.0.1:6379> llen citylist
    (integer) 3
    
  • lremは指定個数の要素を削除することができて、例えば前から後へ探して、見つけた前の2つのqqは正数で個数を指定します:前から後へ探して負の数で個数を指定することを表します:後ろから
  • を探します
    127.0.0.1:6379> lpush list1 qq baidu taobao sina qq baidu qq taobao qq
    (integer) 9
    127.0.0.1:6379> lrange list1 0 10
    1) "qq"
    2) "taobao"
    3) "qq"
    4) "baidu"
    5) "qq"
    6) "sina"
    7) "taobao"
    8) "baidu"
    9) "qq"
    127.0.0.1:6379> lrem list1 2 qq   >>>     qq
    (integer) 2
    127.0.0.1:6379> lrange list1 0 10
    1) "taobao"
    2) "baidu"
    3) "qq"
    4) "sina"
    5) "taobao"
    6) "baidu"
    7) "qq"
    127.0.0.1:6379> lrem list1 -1 baidu   >>>      baidu
    (integer) 1
    127.0.0.1:6379> lrange list1 0 10
    1) "taobao"
    2) "baidu"
    3) "qq"
    4) "sina"
    5) "taobao"
    6) "qq"
    127.0.0.1:6379> lrem list1 0 taobao  >>>     taobao
    (integer) 2
    127.0.0.1:6379> lrange list1 0 10
    1) "baidu"
    2) "qq"
    3) "sina"
    4) "qq"
    

    lsetは、下付きの値を変更できます.例えば、下付きの値を360に変更します.
    127.0.0.1:6379> lset list1 1 360
    OK
    127.0.0.1:6379> lrange list1 0 10
    1) "baidu"
    2) "360"
    3) "sina"
    4) "qq"
    
  • linsertは、360の後に要素cx
  • を追加するなど、指定された値の前または後に新しいデータを挿入することができる.
    127.0.0.1:6379> linsert list1 after 360 cx
    (integer) 5
    127.0.0.1:6379> lrange list1 0 10
    1) "baidu"
    2) "360"
    3) "cx"
    4) "sina"
    5) "qq"
    
  • 本番環境では、リストの使用が広範な場合、左からデータを追加し、右からデータを読み出すことが多い.例えば、キャッシュに5つのデータ
  • をキャッシュする.
    127.0.0.1:6379> lpush list2 q1
    (integer) 1
    127.0.0.1:6379> lpush list2 q2
    (integer) 2
    127.0.0.1:6379> lpush list2 q3
    (integer) 3
    127.0.0.1:6379> lpush list2 q4
    (integer) 4
    127.0.0.1:6379> lpush list2 q5
    (integer) 5
    
  • では、新しく追加されたデータが一番後ろ(一番下、一番右)の
  • であることがわかります.
    127.0.0.1:6379> lrange list2 0 10
    1) "q5"
    2) "q4"
    3) "q3"
    4) "q2"
    5) "q1"
    
  • では、データを読み取るときに
  • を後から読むことができる.
    127.0.0.1:6379> rpop list2
    "q1"
    127.0.0.1:6379> rpop list2
    "q2"
    127.0.0.1:6379> rpop list2
    "q3"
    127.0.0.1:6379> rpop list2
    "q4"
    127.0.0.1:6379> rpop list2
    "q5"
    

    これは実際には生産者-消費者モデル、いわゆるメッセージキューです.通常、メッセージキューは受注、ユーザー登録シーンで使用されます.たとえば、ユーザーが受注を発行した場合、この受注はまずメッセージキューに保存されます.この場合、データベースが書き込まれていないとダウンタイムになります.問題ありません.起動後、メッセージキューを読み込むことで、実行を続行できます.

    集合タイプ(set)


    集合には,交差,並列などの概念がある.saddはコレクションを作成できます.ここでは3つの要素を追加します.
    127.0.0.1:6379> sadd myset qq
    (integer) 1
    127.0.0.1:6379> sadd myset baidu
    (integer) 1
    127.0.0.1:6379> sadd myset sina
    

    smembersはコレクション内のすべての要素を取得できます
    127.0.0.1:6379> smembers myset
    1) "baidu"
    2) "qq"
    3) "sina"
    

    Sismemberは、要素が集合中であるかどうかを判断します.
    127.0.0.1:6379> sismember myset sina
    (integer) 1           >>>    
    127.0.0.1:6379> sismember myset qqa
    (integer) 0           >>>     
    

    私たちはどんなシーンで交差を使うのでしょうか.例えば、友达のリストでは、あなたの友达でもあり、私の友达でもあるので、交差に使います.

    秩序化集合(sortdset)

  • ZADD key score member[[score member][score member]...]は、1つ以上のmember要素およびそのscore値を秩序セットkeyに追加する.
  • #       
    127.0.0.1:6379> zadd sortdset1 10 qq
    (integer) 1
    #       
    127.0.0.1:6379> zadd sortdset1 7 baidu 8 sina 15 taobao 
    (integer) 3
    
  • ZRANGEBYSCORE key min max[WITHSCORES][LIMIT offset count]秩序セットメンバーはscore値の増加(小さいものから大きいものまで)順に並べられている.
  • 127.0.0.1:6379> zrange salary 0 100 withscores
    1) "baidu"
    2) "7"
    3) "sina"
    4) "8"
    5) "qq"
    6) "10"
    7) "taobao"
    8) "15"
    
  • ZCARDkeyは、秩序セットkeyの基数
  • を返す
    127.0.0.1:6379> zcard sortdset1
    (integer) 4
    
  • ZCOUNT key min maxは、minとmaxの間のscore値(デフォルトでは、score値がminまたはmaxに等しい)のメンバーの数である順序セットkeyに戻ります.
  • 127.0.0.1:6379> zcount sortdset1 5 10
    (integer) 3    >>>   score  5-10  taobao score 15      
    
  • ZSCORE keyメンバーは、シーケンスセットkeyのメンバーメンバーメンバーのscore値を返します.メンバー要素が整列セットkeyのメンバーでない場合、またはkeyが存在しない場合はnil
  • を返します.
    127.0.0.1:6379> zscore salary baidu
    "7"
    
  • ZRANK keyメンバーは、順序セットkeyのメンバーメンバーメンバーの順位を返します.ここで、整列セットメンバーはscore値の増加(小さいものから大きいものまで)の順に並べられます.ランキングは0で、つまりscore値が最も小さいメンバーは0です.ZREVRANKコマンドを使用すると、score値によってメンバーが減算(大きいから小さい)されたランキングが得られます.
  • 127.0.0.1:6379> zrank salary baidu
    (integer) 0        >>>baidu    
    127.0.0.1:6379> zrank salary qq
    (integer) 2		    >>>qq    
    
  • ZINCRBY key increment memberは、秩序セットkeyのメンバーmemberのscore値にインクリメンタルincrementを加えたものである.負の値incrementを渡すことで、ZINCRBY key-5 memberなどのscoreから対応する値を減算することができます.これは、memberのscore値を5減算することです.キーが存在しない場合、またはメンバーがキーのメンバーでない場合、ZINCRBYキーincrementメンバーはZADDキーincrementメンバーに等しい.keyが秩序セットタイプでない場合、エラーが返されます.score値は、整数値または二重精度浮動小数点数であってもよい.
  • ZREM key member[member...]秩序セットkeyの1つ以上のメンバーを削除します.存在しないメンバーは無視されます.keyが存在するが順序セットタイプではない場合、エラーが返されます.
  • ZREVRANGE key start stop[WITHSCORES]は、秩序セットkeyで指定された区間内のメンバーを返します.メンバーの位置はscore値の減少(大きいから小さい)で並べられます.同じscore値を持つメンバーは、辞書順の逆順序(reverse lexicographical order)で並べ替えられます.メンバーがscore値の減算順に並べられている点を除いて、ZREVRANGEコマンドの他の態様はZRANGEコマンドと同様である.