Redisでよく見られるアプリケーションシーン

3916 ワード

文書ディレクトリ

  • 一般的なアプリケーションシーン
  • 1. キャッシュ
  • 2. ランキング
  • 3. カウンタ
  • 4. 最熱前N本データ
  • 5. 分散ロック
  • 6. 購読発行
  • 7. 分散セッション
  • 8. 制限速度
  • 9. キュー、ブロッキングキュー
  • 10. ユーザタグ
  • 11. 乱数、抽選
  • 12. Webユーザーのアクセス履歴
  • 13. 地理的位置
  • 一般的な適用シーン


    ここでは、適用シーンを簡単に記録するだけで、各適用シーンの使用の詳細を最適化する必要があります.

    1.キャッシュ


    Redisは他のキャッシュに比べて非常に大きな利点があり、複数のデータ型をサポートすることです.
    データ型
    説明
    string
    文字列、最も簡単なk-vストレージ
    hash
    hash形式、valueはfieldとvalueで、ID-Detailのようなシーンに適しています.
    list
    簡単なlist、シーケンスリスト、トップまたは末尾のデータ挿入をサポート
    set
    無秩序list、検索速度が速く、交差、並列、差分処理に適している
    sorted set
    整列set

    2.ランキング


    ランキングは、最近、最も暑い、クリック率が最も高い、活発度が最も高いなどの条件を示すtopリストなど、得点別にソートされます.整列集合sorted setを用いることができる.

    3.カウンタ


    データ統計の需要は非常に普遍的であり,原子の増加によってカウントを維持する.例えば、いいね数、コレクション数、共有数など.
    使用するコマンド:
    コマンド#コマンド#
    説明incr
    じこぞうかincrby
    カスタムステップサイズdecr
    自己減算decrby
    自己減算ステップのカスタマイズ

    4.最も暑い前のN本のデータ

    listを使用して、制限されたセットで使用されるコマンドを実装できます.
    コマンド#コマンド#
    説明lpush
    リストkeyのヘッダーに1つ以上の値valueを挿入ltrim
    1つのリストをトリム(trim)すると、指定した区間内の要素のみがリストに保持され、指定した区間内でない要素は削除されます.

    5.分散ロック


    Redisシングルスレッドの機能を使用して使用するコマンド:
    コマンド#コマンド#
    説明NX
    正常に設定できないPX
    ミリ秒の有効期限
    取得したコマンド:
    SET resource_name my_random_value NX PX 30000
    

    ロックされたLuaスクリプトの削除
    if redis.call("get",KEYS[1]) == ARGV[1] then
        return redis.call("del",KEYS[1])
    else
        return 0
    end
    

    6.購読発行


    RedisはPUBLISH,SUBSCRIBEなどのコマンドによりサブスクリプションとパブリッシュモードを実現

    7.分散セッション


    セッションキャッシュにRedisを使用します.たとえば、WebセッションをRedisに保存します.

    8.制限速度


    まずkeyの現在の値を取得し、制限を超えていない場合はINCRインクリメントを実行し、keyが存在しない場合はredisのトランザクションを使用してkeyと有効期限を初期化します.GET + INCR + EXPIRE
    疑似コード:
    count = redis.GET(key)
    if redis return nil {
      redis.MULTI
      	redis.INCR(key)
      	redis.EXPIRE(key, expire_time)
      redis.EXEC
      count = 1
    }
    if count > limit {
      return     
    } else {
      redis.INCR(key)
    }
    

    9.キュー、ブロックキュー


    Redisは良いメッセージキューとして使用することができ、listのlpopおよびlpushインタフェースを通じてキューの書き込みと消費を行い、自身の性能が良いことで大部分の問題を解決することができる.lpush+brpopがキューをブロックします.
    しかし,使用は提唱されず,メッセージミドルウェアとしてrabbitmqなどのサービスがより推奨される.

    10.ユーザーラベル

    setを使用すると、ユーザーにラベルを追加できます.また、交差、並列化などの操作によって、一部のソーシャルニーズを実現できます.

    11.乱数、抽選

    setspop/srandmemberを使用して乱数に使用されるコマンドを生成します.
    コマンド#コマンド#
    説明spop
    コレクション内のランダム要素を削除して返しますsrandmember
    コレクション内のランダム要素を返します

    12.Webユーザーのアクセス履歴


    独立したユーザーごとのWebサイトへのアクセス履歴
  • は、各独立したユーザがウェブサイトにアクセスしたか否かをBitmapsに保存し、方位のユーザを1とし、アクセスしていないユーザを0とする.setbit unique:users:2018-09-19 ${userId} 1のうち${userId}はオフセット量
  • である.
  • id 8を取得したユーザは、***2018-09-19***でウェブサイトgetbit unique:users:2018-09-19 8
  • にアクセスしたことがある.
  • 2018-09-19この日の独立アクセスを取得するユーザ数bitcount unique:users:2018-09-19
  • 取得2018-09-19と2018-09-20この2日間サイトにアクセスしたユーザーbitop and unique:users:2018-09-19-20 unique:users:2018-09-19 unique:users:2018-09-20
  • 計算2018-09-19ウェブサイトにアクセスした最小ユーザid bitops unique:users:2018-09-19-20 1
  • また、HyperLogLogによって上記の機能を実現することができます.https://mp.csdn.net/mdeditor/82772904#Bitmapsについては反対側のメモを見ることができますhttps://blog.csdn.net/zhang_Red/article/details/82772036

    13.地理的位置


    Redisは3.2以降、地理的位置GEO機能を追加し、地理的位置信頼を格納して近くの位置を注入したり、揺らしたりするなど、地理的位置に依存する機能を実現することをサポートしています.参照先:https://blog.csdn.net/zhang_Red/article/details/82775136