redis入門シリーズ(二)

4860 ワード

  • よくある面接問題
  • ①redisにはどのようなデータ構造がありますか?②redisデータ構造の使用シーン?③一般的なredisコマンド?
  • Redis共通のデータ構造
  • redisによく見られるデータ構造は、String、List、Set、Sorted Set、Hashである。String常用命令
    コマンド
    説明
    SET key value
    指定されたkeyの値を設定します。
    GETキー
    指定されたkeyの値を取得します。
    GETSET key value
    与えられたkeyの値をvalueに設定し、keyの古い値(old value)を返します。
    SETEX key seconds value
    指定されたkeyの値を取得します。
    SETNX key value
    keyが存在しない時のみkeyの値を設定します。
    INCR key
    keyに格納されている数字を一つ増やします。
    DECR key
    keyに格納されている数字を一つ減らします。
    Stringデータ構造は簡単なkey-valueタイプです。valueはStringだけでなく、数字でもいいです。従来のkey-valueキャッシュアプリケーション。通常カウント:ミニブログ数、ファン数など。List常用命令
    コマンド
    説明
    LLEN key
    リストの長さを取得
    LPOP key
    リストの最初の要素を移動して取得します。
    LPUSH key value 1[value 2]
    リストの先頭に1つ以上の値を挿入します。
    LRANGE key start stop
    リストの指定範囲内の要素を取得します。
    RPOP key
    リストの最後の要素を削除して、削除された要素の値を返します。
    RPUSH key value 1[value 2]
    リストに1つ以上の値を追加します。
    リストはリストであり、Redis listの応用シーンは非常に多く、Redisの最も重要なデータ構造の一つでもあります。例えば、微博の注目リスト、ファンリスト、メッセージリストなどの機能はすべてRedisのリスト構造で実現できます。Redis listの実現は、逆方向検索とエルゴードをサポートすることができ、より便利に動作することができますが、一部の追加的なメモリオーバーヘッドをもたらします。また、lrangeコマンドにより、ある元素からいくつの要素を読み取り、listに基づいて改ページ照会ができます。この素晴らしい機能は、redisに基づいて簡単な高性能改ページができます。ミニブログのように、ページを引き続けるもの(ページを1ページずつ下に進める)ができます。性能は高いです。Set常用コマンド
    コマンド
    説明
    SADD key member 1[member 2]
    1つ以上のメンバーをセットに追加します。
    SPOP key
    セットのランダム要素を削除して返します。
    SCARD key
    セットのメンバー数を取得します。
    SISMEMBER key member
    メンバー要素が集合keyのメンバーかどうかを判断します。
    SMEMBERS key
    グループの全メンバーを返します。
    SUNION key 1[key 2]
    与えられたセットの集合を返します。
    SREM key member 1[member 2]
    セットの中の1つまたは複数のメンバーを削除します。
    setが外部に提供する機能はlistと同様にリストの機能であり、特にsetは自動的に重量を並べることができる。リストデータを保存する必要がある場合、重複データが発生したくない場合、setは良い選択であり、setはあるメンバーがsetセット内にいるかどうかを判断する重要なインターフェースを提供しています。これもlistに提供できないものです。セットに基づいて、交差、集合、差分セットの動作を容易に実現することができる。例えば、マイクロブログアプリケーションでは、1つのユーザのすべての関心者を1つのセットに存在させ、そのすべてのファンを1つのセットに存在させることができる。Redisは、共同の関心、共同のファン、共同の好みなどの機能を実現するために非常に便利です。このプロセスはつまり、クロスを求めるプロセスであり、具体的なコマンド:sintertore key 1 key 2 key 3
    コマンド
    説明
    ZARD key score 1 member 1[score 2 member 2]
    順序セットに1つ以上のメンバーを追加するか、既存のメンバーのスコアを更新するか?
    ZCARDキー
    順序セットのメンバー数を取得する
    ZRANGE key start stop[WITHSCORES]
    インデックス区間を通して、順序セット指定区間のメンバーを返します。
    ZESCORE key member
    順序集中を返し、メンバーの数値を返します。
    ZREM key member[member...]
    順序セットの1つまたは複数のメンバを削除します。
    setと比較して,sorted setは,セット内の要素がscoreによって秩序化された配列を可能にする重みパラメータscoreを増加させた。例えば、生放送システムにおいて、リアルタイムのランキング情報は、生放送間のオンラインユーザリスト、各種プレゼントランキング、弾幕メッセージ(メッセージ次元で理解できるメッセージランキング)などの情報を含み、Redis中のSortedit構造を使用して記憶するのに適している。Hash常用命令
    コマンド
    説明
    HDEL key field 1[field 2]
    一つ以上のハッシュテーブルフィールドを削除します。
    HEXISTS key field
    ハッシュテーブルkeyで指定されたフィールドが存在するかどうかを確認します。
    HGET key field
    ハッシュテーブルに格納されているフィールドの値を取得します。
    HGETALL key
    ハッシュテーブルで指定されたkeyのすべてのフィールドおよび値を取得する。
    HKEYS key
    すべてのハッシュテーブルのフィールドを取得します。
    HLEN key
    ハッシュテーブルのフィールドの数を取得します。
    HSET key field value
    ハッシュテーブルkeyのフィールドfieldの値をvalueとする。
    Hashはstringタイプのfieldとvalueのマッピングテーブルで、hashは特にオブジェクトを記憶するのに適しています。その後の操作の時、このオブジェクトの中のあるフィールドの値だけを直接修正することができます。例えば、ユーザー情報、商品情報などを格納するためにHashデータ構造ができます。
  • redis上位のデータ構造はHyperLog、geo、bitmapsなどである。HyperLog常用命令
  • コマンド
    説明
    PFADD key element[element...]
    指定要素をHyperLogに追加します。
    PFCONT key[key…]
    与えられたHyperLogの基数推定値を返します。
    Redisは2.8.9バージョンでHyperLog構造を追加しました。Redis HyperLogLogは基数統計を行うためのアルゴリズムであり、HyperLogLogの利点は、入力要素の数や体積が非常に大きい場合、基数を計算するために必要な空間は常に固定されており、しかも小さいことである。Redisでは、HyperLogLogキーごとに12 KBメモリを使うだけで、2^64個近くの異なる要素の基数を計算できます。これは基数を計算する時、要素が多ければ多いほどメモリを消費する集合と対照的である。しかし、HyperLog Logは入力要素によって基数だけ計算されますので、入力要素自体は保存されません。HyperLogLogはセットのように入力された各要素に戻ることはできません。geo常用命令
    コマンド

    説明
    geoadd
    geoadd cityGeo 22.505285 114.904989「深セン」
    経緯度情報を追加
    geopos
    geopos cityGeo深セン
    指定されたkeyの経緯度情報を検索します。
    GEO機能は、Redis 3.2バージョンで提供され、地理的位置情報の格納をサポートして、近くの位置、パン等の地理的位置情報に依存する機能を実現する。bitmaps常用コマンド
    コマンド

    SETB IT key offset value
    set bit bitmaps_test 10 1
    GETB IT key offset
    get bit bitmaps_test 10
    厳密にはBitmapsは新しいデータ構造ではなく、特別な約束を満たす文字列である。set、getなど一連の文字列操作の拡張であり、それとは違って、ビットレベルの操作を提供しています。この角度から見ても、ビット配列、ビットベクトル構造として考えられます。Redisは2.2.0バージョンからset bit、get bit、bitcountなどいくつかのbitmap関連コマンドを追加しました。私達はbit mapsの操作を詳しく見てみます。test 1
    1     (1  ASCII  49,49        110001)
    00110001
    getbit bitmaps_test 2 (      1)
    get bitmaps_test 3 (      1)
    get bitmaps_test 5 (      0)
    get bitmaps_test 7 (      1)
    setbit bitmaps_test 6 1
    get bitmaps_test (      3,      7    1, 00110011,   10    51,  ascii         3)
    
    まず、bitmapはStringであり、Stringの最大長さは512 mであるので、2^32=4294967296の異なるビットを表すことができる。基本的に桁数が足りないことは心配しなくてもいいです。一番よくあるいい評価機能を持って、いい評価の順番を記録する必要がない場合はbitmapを使って優雅に実現できます。私たちは別のビットを使ってユーザIDに対応しています。IDが10000のユーザーに賞賛されたら、ドアにoffsetを10000のビットに設定して、現在のリクエストユーザをマークすることができます。合計ポイント数を集計する必要がある場合は、bitcountを使って、すべての1の数を集計するだけで達成できます。