Redisデータ型とアクション

10588 ワード

この例はredis単一インスタンスモードです
基本データ型
String:最も一般的なデータ型
  • String文字列を保存する以外に、多くの特殊なタイプを保存することができ、シーケンス化後に画像、オブジェクト、数値
  • を保存することができる.
    Hash --key value
  • Mapタイプ
  • List--チェーンテーブル
  • String
  • をチェーンテーブル形式で格納する.
    セット
  • は、String
  • を集合的に記憶する.
    ZSet--整列集合
  • は、
  • をscoreサイズ順に配列する.help @stringコマンドを使用すると、すべてのString関連アクションコマンドを表示できるように、すべてのアクションコマンドの説明をredis-cliで表示できます.help setを使用してsetコマンドの使用方法と説明を表示
    文字列の基本操作
  • set get
  •   > set key1 value1
      OK
      > get key1
      "value1"
    
  • setnx keyが存在する場合は設定しません.は、0
  • を返します.
    > setnx key1 valuenx
    (integer)0
    > setnx key2 value2
    (integer)1
    
  • setexメモリ値の設定の有効期限
  • > setex key3 60 value3  //60    
    (integer)1
    > ttl key3 //      
    (integer)40
    > get key3 //60     
    (nil) // 
    
  • setnxは、分散ロックとして使用することができる.指定したkeyに対して、スレッドがロックを取得するときにsetnxを行い、設定に成功すればロックを取得します.操作は削除を終了します.終了していない場合.他のスレッドsetnxは失敗します.
  • setrange置換文字列
  •   > set email [email protected]
      > setrange email 8 $ //       $   ( 0  )
      > get email
      "maven163$163.com"
    
  • mset or msetnx多値格納
  • > FLUSHALL //    key
    OK
    > mset key1 value1 key2 value2 key3 value3
    OK
    > keys *
    1) "key1"
    2) "key2"
    3) "key3"
    
  • mget多値取得
  • > mget key1 key2 key3
    1) "value1"
    2) "value2"
    3) "value3"
    
  • getset古い値を取得して新しい値
  • に格納
    > getset key1 newvalue
    "value1"
    > get key1
    "newvalue"
    
  • incr、decrデジタルタイプ自増自減+1-
  • > set key1 100  //  ,          ,     
    OK
    > incr key1
    "101"
    > decr key1
    "100"
    
  • incrby、decrbyカスタムの数値増減.小数はincrbyfloatを増加しますが、小数を減らしてdecrbyfloatがないincrbyfloat key-1.5は負数
  • でしかありません.
    > incrby key1 2
    "102"
    > decrby key1 3
    "99"
    
  • append追加文字列append key 1 world
  • strlen文字列長strlen key 1
  • を取得
    Hashタイプ操作
    redisで最も一般的なタイプは、1つのhash idの下で複数のkey valueに対応し、メモリ容量を節約します.オブジェクトを格納するのに適しています.
  • hset
  •  > hset key1 name zhangsan
    (integer)1
    > hset key1 age 18
    (integer)1
    

    これで{"name":"zhangsan","age":1}のオブジェクトが追加されます.彼らが対応するkeyは「key 1」
  • hget
  • > hget key1 name
    "zhangsan"
    > hget key1 age
    "18"
    
  • hmset、hmgetマルチパラメータ値の入力と取得
  • > hmset key1 sex nan addr hangzhou
    OK
    > hmget key1 name sex age addr
    1) "zhangsan"
    2) "nan"
    3) "18"
    4) "hangzhou"
    
  • hsetnx keyで既に存在するパラメータは更新されません
  • > hsetnx key1 name lisi
    (integer)0 //  0.         
    > hget key1 name 
    "zhangsan" //    name,  zhangsan
    
  • hincrby加(減)法操作hincrbyfloat浮動小数点型操作
  • > hincrby key1 age 2 // 2
    (integer)20
    > hincrby key1 age -2 // 2
    (integer)18
    
  • hexistsが存在するかどうか
  • > hexists key1 name
    (integer)1
    > hexists key1 weight
    (integer)0
    
  • hlenオブジェクトのキー値の数
  • > hlen key1
    (integer)4
    
  • hdel指定したfield hkeys表示オブジェクトのすべてのfieldを削除するkey
  • > hkeys key1 //      field
    1) "name"
    2) "age"
    3) "sex"
    4) "addr"
    > hdel key1 addr //  
    (integer)1
    > hkeys key1  //    field
    1) "name"
    2) "age"
    3) "sex"
    
  • hvals表示オブジェクト内のすべてのfieldのvalue
  • > hvals key1
    1) "zhangsan"
    2) "20.5"
    3) "nan"
    
  • hgetallすべてのfieldのkey value
  • を取得
    > hgetall key1
    1) "name"
    2) "zhangsan"
    3) "age"
    4) "20.5"
    5) "sex"
    6) "nan"
    

    Listタイプ操作
    削除要素を両端に追加できる秩序化された文字列チェーンテーブルを格納するため、スタックとしてもキューとしても使用できます.スタック(先進後出):lpush+lpop rpush+rpop;キュー(先進先出)lpush+rporpush+lpopは、Redisのlistのデータ型特性やメモリライブラリの効率的な特性のため、メッセージキュー(MQ)として使用できる.
  • lpushは頭部から元素を加え、先進的に後出する.rpopを併用すれば先進的な先発も実現できるので相対的である.
  • > lpush list1 hello
    (integer) 1
    > lpush list1 world
    (integer) 2
    > lrange list1 0 -1 //       。        
    1) "world"
    2) "hello"
    > lpop list1
    "world"  //        "world"
    >lpop list1
    "hello"
    

    他のrとlの組合せは、上記の試験法である.
  • lrange左から右にリストを表示します.rrange法がない
  • > rpush list1 hello
    (integer) 1
    > rpush list1 world
    (integer) 2
    > lrange list1 0 -1 //  list1     
    1) "hello"
    2) "world"
    > lrange list1 -2 -1 //list        -3 -2 -1      
    1) "hello"
    2) "world"
    
  • linsert挿入操作、要素の前(before)または後(after)挿入
  • を指定できます.
    > linsert list1 before world my // world    my
    (integer) 3
    > lrange list1 0 -1
    1) "hello"
    2) "my"
    3) "world"
    
  • lset置換指定下付き要素
  • lrm要素を削除します.削除された個数
  • を返します.
    >lrm list1 0 a //    a  
    >lrm list1 2 a //      a  
    >lrm list1 -2 a //       a  
    
  • ltrim切り取りキュー
  • > ltrim list1 0 1 //         。
    
  • lpop rpopは、ヘッダ、テールからデータを削除する、削除されたデータ
  • を返す.
  • rpoplpush削除と追加操作を1つにして、popから出た要素を新しいキューに追加することができます.単独で使用するよりも安全な原子化操作です.使用シーン:1.同じキューでヘッダとテールの交換が可能で、すべてを交換するのは1回の遍歴に相当します.例えば、ipアドレスの列が格納されており、いずれも利用可能かどうかの判断を行いたい.2.あるキューpopから別のキューにpushを出すと、popから出た要素がトランザクションに失敗する可能性があります.この場合、別のキューに行って元の要素を取り戻して遡及することができます.
  • > lrange list1 0 -1
    1) "a"
    2) "my"
    > rpoplpush list1 list1 //         
    "my"
    > lrange list1 0 -1 //rpoplpush    。       
    1) "my"
    2) "a"
    
  • lindexはindexの位置の要素
  • を返します.
    > lindex list1 0
    "my"
    
  • llenは、要素の個数
  • を返します.
    > llen list1
    (integer) 2
    

    Setタイプアクション
    Stringタイプの無秩序の集合とlistの違い:list秩序、set無秩序、list繰り返し可能、set繰り返し不可、redisのsetはhashtableによって実現される.シーンの使用:アクセス者ipを格納するなどの統計により、アクセス量(scard)を統計できます.交差(sinter)共通の友人、共通の関心者を見る.
  • sadd追加要素
  • > sadd set1 aaa bbb ccc //  set1       
    (integer) 3
    > sadd set2 aaa bbb bbb //       ,        
    (integer) 2
    
  • smembers setの要素
  • を表示
    > SMEMBERS set2
    1) "bbb"
    2) "aaa"
    
  • srem削除要素
  • > srem set1 aaa
    (integer) 1
    
  • spopはランダムに削除され、削除された要素
  • を返します.
  • sinter,sunionは集合の交差を取り,
  • を集める.
    > sinter set1 set2
    1) "bbb"
    > sunion set1 set2
    1) "ccc"
    2) "aaa"
    3) "bbb"
    
  • sdiff差セット
  • > SMEMBERS set1
    1) "ccc"
    2) "bbb"
    > SMEMBERS set2
    1) "bbb"
    2) "aaa"
    > sdiff set1 set2 //sdiff     (set1)   ,      (set2)      。
    1) "ccc"
    > sdiff set2 set1
    1) "aaa"
    
  • sdiffstore、sinterstore、sunionstoreは、戻り結果を新しいセットに
  • 格納します.
    > sdiffstore setdiff set1 set2
    (integer) 1
    > SMEMBERS setdiff 
    1) "ccc"            //sdiffstore     
    > sinterstore setinter set1 set2
    (integer) 1
    > SMEMBERS setinter
    1) "bbb"          //sinterstore     
    > sunionstore setunion set1 set2
    (integer) 3
    > SMEMBERS setunion
    1) "ccc"
    2) "aaa"
    3) "bbb"        //sunionstore     
    
  • smoveは、実質的にsremおよびsaddの原子化動作
  • である1つのsetから元素を除去して別のsetに追加する.
    > smove set1 set2 ccc
    (integer) 1
    > SMEMBERS set1
    1) "bbb"
    > SMEMBERS set2
    1) "ccc"
    2) "bbb"
    3) "aaa"
    
  • scard、smembers、sismember要素の個数を表示し、すべての要素を表示し、ある要素が存在するかどうか
  • > scard set2
    (integer) 3
    > smembers set2
    1) "ccc"
    2) "bbb"
    3) "aaa"
    > sismember set2 aaa
    (integer) 1
    
  • srandmemberランダムに要素を取り出しますが、
  • は削除しません.
    ZSET秩序集合
    hashテーブルとskiplistを使用して実装します.挿入と検索が高速です.指定したscoreサイズでソートします.スコア順位のソートが必要なシーンで使用できます.例えば、試験順位、サイト順位(検索のソート)、タイムスタンプをscore(時間順のデータ)、ユーザーの個人化興味ラベルとする
  • zaddはsetの挿入より1つの点数を多くした.このスコアの大きさで
  • を並べ替えます.
    > zadd set1 1 aaa 2 bbb 3 ccc  //1 aaa 2 bbb 3 ccc
    (integer) 3
    > ZRANGE set1 0 -1 //      
    1) "aaa"
    2) "bbb"
    3) "ccc"
    > ZRANGE set1 0 -1 withscores //      ,     
    1) "aaa"
    2) "1"
    3) "bbb"
    4) "2"
    5) "ccc"
    6) "3"
    
  • 既存の要素zaddに対する修正可能な順序
  • > zadd set1 0 ccc  //ccc      0
    (integer) 0
    > ZRANGE set1 0 -1
    1) "ccc"   //ccc     
    2) "aaa"
    3) "bbb"
    
  • zadd set 1 nx 20 ddd既存の要素
  • は更新されません.
  • zadd set 1 xx 20 dddは存在しない要素
  • を更新しない.
  • zadd set 1 ch 30 aaaは変化する要素の個数を返してchを加えないで返してすべて0
  • です
     > zadd set1 ch 30 aaa
    (integer) 1
    
  • zadd set 1 incr 5 aaa aaa対aaa 5分
  • > zadd set1 incr 5 aaa
    "35"
    
  • zrem削除要素
  • > zrem set1 aaa
    (integer) 1
    > ZRANGE set1 0 -1
    1) "ccc"
    2) "bbb"
    
  • zrangebyscore指定スコア区間ルックアップ要素
  • > zrangebyscore set1 0 100
    1) "ccc"
    2) "bbb"
    > zrangebyscore set1 0 0
    1) "ccc"
    
  • zrevrange set 1 0-1 withscores逆シーケンス検索要素
  • > zrange set1 0 -1 withscores //    
    1) "ccc"
    2) "0"
    3) "bbb"
    4) "2"
    > zrevrange set1 0 -1 withscores //  
    1) "bbb"
    2) "2"
    3) "ccc"
    4) "0"
    
  • zrankは、スコアを表示するのではなく、0から始まる
  • の要素の順位を表示します.
    > zrank set1 bbb
    (integer) 1
    > zrank set1 ccc
    (integer) 0
    
  • zremrangebyrank要素
  • をランキング順に削除
    > ZREMRANGEBYRANK set1 0 1 //     
    (integer) 2
    
  • zremrangebyscoreスコア番号で
  • を削除
    > zadd set1 5 aaa 6 bbb 7 ccc //    
    (integer) 3
    > zremrangebyscore set1 0 6 //    0 6 
    (integer) 2
    > zrange set1 0 -1 
    1) "ccc"        //    ccc    5 6      
    
  • zcardは、集合内のすべての要素の個数
  • を返します.
    > zcard set1
    (integer) 1
    
  • zcount set 1 5 10所与のスコア区間内の要素個数
  • テクニックと構成の最適化
  • redisメモリを節約します.数が少ない場合、Hashタイプはredis内部でziplistに変換されます.hashmapではありません.redis.confのデフォルトhash-maxは512に設定されています.デフォルトの2倍
  • に設定可能
    hash-max-ziplist-entries 1024
    hash-max-ziplist-value 128
    
  • 1 1千万人以上のユーザデータを格納する必要がある場合、1つのhash keyに複数のユーザを格納すると、より多くのスペースを節約できます.
  • >hset 10000 001 userinfo
    >hset 10000 002 userinfo
    

    以上のように.hashkeyには999人のユーザーが保存できます