Redis(一)--基本紹介とStringタイプ


Redisは豊富なデータフォーマットをサポートし、以下はRedisがサポートするデータフォーマットのリストです.
 
  • Binary-safe strings

  • バイナリ・セキュリティの文字列
  • Lists

  • 挿入時間でソートされた文字列のセットは、基本的にチェーンテーブルです.(文字通り、リストが長すぎると他のデータ構造に置き換えられます)
  • Sets

  • ユニークな無秩序な文字列の集合
  • Sorted sets

  • 集合でもありますが、各要素はスコアに対応し、集合内の要素はこのスコアでソートされます.Sorted setsはtop 10の要素を取得するような操作をサポートする.
  • Hashes

  • 通常の意味のmapで、keyもvalueも文字列です.
  • Bit arrays

  • Redisはビット配列のように文字列を操作することをサポートし、1に設定されたビットの数を統計したり、0または1に設定された最初のビットを探したりするなど、いくつかのカラムビット操作を実行することができます.
  • HyperLogLogs

  • これは確率論におけるデータ構造であり,集合の基数を推定するために用いられる.これはオフィス用のtokenカードと同じで、原理が複雑で、とても簡単です.
     
    このセクションでは、Redisの基本的な操作とStringタイプに関する操作について説明します.
     
    Redis keys
    ここではRedis keysのルールについて説明します.
  • redis keysはバイナリで安全です.

  • 1つのデータはバイナリで安全です.つまり、バイナリシーケンスでデータを表すことができます.例えば「foo」という文字列はバイナリで安全で、JPEGファイルもバイナリで安全です!
  • 長すぎるkeyはよくない
  • 例えば、1 K長のkeyを定義すると、記憶に無駄があるだけでなく、keyを比較するのに時間がかかります.ビジネスのkeyが長い場合は(SHA 1)ハッシュで処理でき、メモリと帯域幅を効率的に節約できます.
  • 短すぎるkeyは通常
  • ではありません
    何事も極端に走らないでください.「u 10000 flw」の可読性は「user:100000:followers」の可読性がないに違いありません.コードを書くときは自分に優しくしてください.
  • schema
  • を定義しようとする
    1つの推奨事項:フィールド間はコロンで区切られ、単語間はハイフンで区切られます.たとえば、「comment:1234:replay-to」などです.
  • keyの最大長は512 MB
  •  
    Redis Strings
    stringsはredisの中で最も簡単なタイプであり、memcachedの唯一のデータ型でもある.(作者がそう言ったのは少し自慢の意味がある)
    redisディレクトリのredis-cliツールを開き、stringタイプの使い方を見てみましょう.
     
    127.0.0.1:6379> set mykey somevalue
    OK
    127.0.0.1:6379> get mykey
    "somevalue"

     
    以上のように、SETコマンドとGETコマンドを使用してstringタイプの値にアクセスします.注意SETは元の値を上書きし、後続のvalueが空の値であっても元の値をクリアします.
    SETコマンドにnxパラメータを追加し、keyが存在するときにSET操作に失敗することを指定できます.あるいはxxパラメータを追加して、keyがすでに存在する場合にのみSET操作が成功することを指定します.
     
    127.0.0.1:6379> set mykey newval nx
    (nil)
    127.0.0.1:6379> get mykey
    "somevalue"
    127.0.0.1:6379> set mykey2 newvalue xx
    (nil)
    127.0.0.1:6379> set mykey newvalue xx
    OK
     
     
    文字列として数値を格納することもでき、redisはこの数値に一連の原子操作(INCR、INCRBY、DECR、DECRBYなど)を提供している.
     
    127.0.0.1:6379> set counter 100
    OK
    127.0.0.1:6379> get counter
    "100"
    127.0.0.1:6379> incr counter
    (integer) 101
    127.0.0.1:6379> incrby counter 50
    (integer) 151
     
     
    上記の原子操作は、複数のクライアントの競合問題を効果的に解決する.
    GETSETコマンドは、keyに新しい値を設定し、古い値を返すことができます.1つの典型的な使用シーンはウェブサイトのpvを計算します:毎回ユーザーがアクセスする時、私達はINCRコマンドでカウンタをプラスすることができて、もし私達が1時間ごとにpvを統計するならば、GETSETコマンドを使って新しい値を“0”に設定して、このようにいかなるアクセスを失うことはありません求めます.
    MSETとMGETは複数のkeyを一度に操作することができ,遅延を低減するのに有利である(残念ながらcodisはこの2つの操作のサポートが不十分である)
     
    127.0.0.1:6379> mset a 10 b 20 c 30
    OK
    127.0.0.1:6379> mget a b c
    1) "10"
    2) "20"
    3) "30"
     
     
     
    Redis keyの操作
    Redisはkeyを操作するコマンドを提供し、最も有用なのはEXIST、DEL、TYPEの3つです.EXISTは1つのキーが存在するかどうかを判断するために使用され、DELコマンドは1つのキーを削除することができ、TYPEコマンドはこのキーに対応するvalueタイプを表示することができる.
     
    127.0.0.1:6379> set mykey hello
    OK
    127.0.0.1:6379> exists mykey
    (integer) 1
    127.0.0.1:6379> del mykey
    (integer) 1
    127.0.0.1:6379> exists mykey
    (integer) 0
    127.0.0.1:6379> set mykey x
    OK
    127.0.0.1:6379> type mykey
    string
    127.0.0.1:6379> del mykey
    (integer) 1
    127.0.0.1:6379> type mykey
    none
     
     
     
    有効期限
    ここではRedisの有効期限メカニズムを見てみましょう.各キーに生存時間を設定することができます.この時間になると、自動的にDELコマンドを呼び出して削除する効果と同じように、キーが自動的に破棄されます.
    Redisの有効期限に注意すべき点:
  • では、有効期限を秒またはミリ秒単位で設定する
  • がサポートされています.
  • Redisシステムの期限切れ時間に対する解析精度は常にミリ秒
  • である.
  • の有効期限の情報は、ディスクに複数バックアップされて格納されるため、Redisサーバの停止の影響を受けません.

  •  
    127.0.0.1:6379> set key some-value
    OK
    127.0.0.1:6379> get key
    "some-value"
    127.0.0.1:6379> expire key 5
    (integer) 1
    127.0.0.1:6379> get key
    "some-value"
    127.0.0.1:6379> get key
    (nil)

     
    上記の例では、EXPIREコマンドでkeyの有効期限を5秒と指定し、2回のGETコマンドの間、このkeyは自動的に破棄されます.
    PERSISTコマンドを使用してkeyの有効期限を削除することもできます.
    また、keyを作成するときに有効期限を直接指定することもできます.
     
    127.0.0.1:6379> set key 100 ex 10
    OK
    127.0.0.1:6379> ttl key
    (integer) 8
    127.0.0.1:6379> ttl key
    (integer) -2
    127.0.0.1:6379> ttl key
    (integer) -2
    127.0.0.1:6379> get key
    (nil)
     
     
    上記の例では、keyの値を100とし、有効期限が10秒であり、その後TTLコマンドでkeyの残りの生存時間を表示し、keyが有効期限切れになった後も生存時間が-2と表示されていることがわかります(ステータス識別規則であると推測されます).
    以下のように、PEXPIREコマンドとPTTLコマンドを使用して、ミリ秒の精度で対応する操作を行います.
     
    127.0.0.1:6379> set key 100
    OK
    127.0.0.1:6379> get key
    "100"
    127.0.0.1:6379> pexpire key 15000
    (integer) 1
    127.0.0.1:6379> ttl key
    (integer) 11
    127.0.0.1:6379> pttl key
    (integer) 8523