Redis一般的に使用されるデータ構造と吐血のアプリケーションシナリオ

1.文字列データタイプ:

文字列の一般的な操作:

  • SET key value キーと値のペアを保存し、SETはタイプに関係なく古い値を上書きします
  • MSET key value [key value ...] 文字列のキーと値のペアをバッチ保存する
  • SETNX key value 存在しないキーと値のペアを保存し、キーが存在する場合は何もしない
  • GET key キーに従ってキーに対応する値を取得します
  • MGET key [key ...] 文字列のキーと値のペアをバッチで取得する
  • DEL key キーに対応するキーと値のペアを削除します
  • EXPIRE key seconds 指定されたキー値の有効時間を設定します

原子の加算と減算

  • INCR key キー値に対応する番号に1を追加します
  • DECR key キーによって保存された値を1減らします
  • INCRBY key increment キーストレージアレイに増分を追加する
  • DECRBY key increment キーによって格納された配列から増分を減算します

アプリケーションシナリオ:

  • 単一値のキャッシュ:SET key valueGET key

  • オブジェクトキャッシュ:
    SET user:1 value(json字符串);
    預金:MSET user:1:name zhangsan user:1:age 10
    テイク:MGET user:1:name user:1:age
    JSON形式よりも優れた単一の属性操作を容易にするために、その優れたパフォーマンス、最適な選択HASH

  • 分散ロック:
    SETNX product:10001 true// 1を送信してロックが成功したことを示し、不利な場合は使用しない
    SETNX product:10001 true// 0を送信してロックが失敗したことを示す
    DEL product:10001//ロックを解除する
    SET product:10001 true ex 10 nx//プログラムが予期せず終了してデッドロックが発生するのを防ぐ


  • WeChatパブリックアカウントの読み取り使用シナリオ
    Redis でのカウンター読み取り統計の使用

    • INCR article:readcount:{文章Id} 記事閲覧統計
    • GET article:readcount:{文章Id}
  • 分散システムの一意のIDは、
    INCRBY orderId 1000redisを生成してシリアル番号を生成し、パフォーマンスを向上させます。


2.HASH構造

一般的な操作

  • HSET key field value //ハッシュテーブルキーのキー値を格納します
  • HSETNX key field value //存在しないハッシュテーブルキーのキー値を格納します
  • HMSET key field value [field value ...] 複数のキーと値のペアをハッシュテーブルキーに格納する
  • HGET key field ハッシュテーブルのフィールドのキー値を取得する
  • HMGET key field [field ...] ハッシュテーブルキーの複数のフィールドのキー値を取得する
  • HDEL key field [field ...] ハッシュテーブルキーのフィールドキー値を削除する
  • HLEN key ハッシュテーブルキーのフィールド数
  • HGETALL key ハッシュテーブルキーのすべてのキーと値のペアを返します
  • HINCRBY key field increment ハッシュテーブルキーのフィールドフィールドの値に増分を追加する

アプリケーションシナリオ

  • オブジェクトストレージ
    HSET user:10001 name zhangsan age 10//オブジェクトプロパティの設定
    HGET user:10001 name age//属性情報の取得

  • eコマースのショッピングカートのシナリオ
    ショッピングカートのシーン
    eコマースのショッピングカートのデータ構造:

    • ユーザーIDをキーとして使用
    • 製品IDはフィールドです
    • 商品数はお値打ちです

    ショッピングカート操作:

    • 製品を追加-> HSET cart:1001 10088 1
    • 数を増やす->HINCRBY cart:1001 10088 1
    • 製品の総数->HLEN cart:1001
    • 製品を削除 HDEL cart:1001 10088
    • ショッピングカート内のすべてのアイテムを取得する->HGETALL cart:1001

3.Listデータ構造

リスト構造図

一般的なコマンド

  • LPUSH key value [value ...] キーリストのヘッド(左端)に1つ以上の値を挿入します
  • RPUSH key value [value ...] キーリストのヘッダーに1つ以上の値を挿入します(右端)
  • LPOP key キーリストのヘッド要素を削除して返す
  • RPOP key キーのテール要素を削除して返します
  • LRANGE key start stop キー内の指定された間隔の要素を返します。間隔オフセットは開始と停止で指定されます
  • BLPOP key [key ...] timeout要素がキーの先頭からポップアップします。キーに要素がない場合は、ブロックして待機し、タイムアウトをブロックします。タイムアウトが0の場合は、常にブロックします
  • BRPOP key [key ...] timeout要素がキーテーブルの最後からポップアップします。キーに要素がない場合、待機をブロックし、タイムアウトをブロックします。タイムアウトが0の場合、ブロックを意味します

アプリケーションシナリオ

  • 一般的なデータ構造

    • スタック= LPUSH + LPOP-> FILO詳細
    • キュー= LPUSH + RPOP-> FIFO先入れ先出し
    • ブロッキングMQ(ブロッキングキュー)= LPUSH + BRPOP

  • WeiboおよびWeChatパブリックアカウントのメッセージフロー

WeiboおよびWeChatメッセージフローの概略図
この例では、RedisでのWeChatパブリックナンバースペアタイヤとMacトークの使用に焦点を当てています。

  • MacトークがメッセージID 10018をリリース-> LPUSH msg:{订阅人Id} 10018
  • スペアタイヤは車がメッセージID 10019->をリリースしたと言ったLPUSH msg:{订阅人Id} 10019
  • 6->などの最新の購読済みニュースを表示LRANGE msg:{订阅人Id} 0 5

4.SET構造

一般的なコマンド

  • SADD key member [member ...] 1つ以上のメンバーをキーに入れ、要素が存在する場合は無視します
  • SREM key member [member ...] コレクションキーから1つ以上のメンバーを削除する
  • SMEMBERS key コレクションキーのすべての要素を返します
  • SCARD key コレクションキーの要素の数
  • SISMEMBER key member メンバーがキーの要素かどうかを判別
  • SRANDMEMBER key [count] キーからcount個の要素をランダムにカウントします。要素はキーから削除されません。
  • SPOP key [count] キーからcount個の要素をランダムに取得し、キーから要素を削除します
  • SINTER key [key ...]交差点運転
  • SINTERSTORE destination key [key ...] 交差の結果を新しい収集先に保存します
  • SUNION key [key ...] ユニオンオペレーション
  • SUNIONSTORE destination key [key ...]ユニオンの結果を新しい宛先に保存
    - SDIFF key [key ...]差分操作、

アプリケーションシナリオ

  • 宝くじモデル
    宝くじモデル
    例におけるRedisの参加宝くじの使用:
    • コレクションに参加するには、クリックして抽選に参加してください-> SADD key {userId}
    • ドローに参加しているすべてのユーザーを表示->SMEMBERS key
    • 勝者を引く->SRANDMEMBER key [count]/SPOP key [count]

  • いいね、フォローして、WeiboとWeChatで収集

コレクションモデルに「いいね!」
例のRedisでのlikeモデルの使用:

  • いいね->SADD like:{消息id} {用户id}

  • とは異なり->SREM like:{消息id} {用户id}

  • ユーザーが好きかどうかを確認します->SISMEMBER like:{消息id} {用户id}

  • 好きなユーザーのリストを取得する->SMEMBERS like:{消息id}

  • いいねの数を取得->SCARD like:{消息id}

  • WeChat Weiboフォローモデル:
    WeChat注意モデル
    Redisで使用されるWeChatフォローモデルの例:

    • 張さんがフォローする人->zhangsanSET->{lisi,sima,luban}
    • Li Siフォローする人->lisiSET->{zhangsan,sima,luban,qiaofeng}
    • 王呉がフォローする人々->wangwuSET->{zhangsan,lisi,luban,qiaofeng,duanyu}
    • 張さんと李さんが気になる人→SINTER zhangdanSET lisiSET
    • ジョー・スミスはまた、人々の注目ドウを懸念- >裁判官へのウォッチリストの各メンバーのzhangsanSETリストSISMEMBER simaSET lisiSISMEMBER lubanSET lisi
    • 張さんが知っているかもしれない人々->SDIFF lisiSET zhangsanSET
  • 一括操作eコマースプラットフォームの
    商品スクリーニング
    商品スクリーニング:redis での商品スクリーニング条件の使用

    • SADD brand:HUAWEI p30
    • SADD brand:xiaomi mi-6X
    • SADD brand:IPhone iphone8
    • SADD os:android p30 mi-6X
    • SADD cpu:brand:intel p30 mi-6X
    • SADD ram:8G p30 mi-6X iphone8
    • SINTER os:android cpu:brand:intel ram:8G->{p30 mi-6X}

SortedSetデータ構造

一般的なコマンド

  • ZADD key score member [[score member] [score member] ...] スコア付きの要素を順序付けられた組み合わせキーに追加する
  • ZREM key member [member ...] 注文したコレクションからキーを削除します
  • ZSCORE key member 順序付けられたキー内のメンバーメンバーのスコア値を返します
  • ZINCRBY key increment member 順序付きセットキーのメンバー要素スコアに増分を追加します
  • ZCARD key 順序付けられたキーの要素の数を返します
  • ZRANGE key start stop [WITHSCORES] 順序付きセットキーの要素を開始添字から停止添字まで正の順序で取得します
  • ZREVRANGE key start stop [WITHSCORES] 順序付きセットキーの要素を開始添字から停止添字まで逆の順序で取得します
  • ZUNIONSTORE destination numkeys key [key ...] ユニオン計算
  • ZUNIONSTORE destination numkeys key [key ...] 交差計算

アプリケーションシナリオ

  • リーダーボードシーン
    リーダーボード
    RedisでのWeiboリーダーボードの使用:
    • ニュース->をクリックしますZINCRBY hotNews:20190819 1 守护香港
    • 今日のトップ10を表示->ZREVRANGE hotNews:20190819 0 10 WITHSCORES
    • 7日間の検索リスト->ZUNIONSTORE hotNews:20190813-20190819 7 hotNews:20190813 hotNews:20190814 hotNews:20190815....hotNews:20190819
    • 7日にトップ10を表示->ZREVRANGE hotNews:20190813-20190819 0 10 WITHSCORES

ここに画像の説明を挿入

公開された41元の記事 ウォン称賛14 ビュー10000 +

おすすめ

転載: blog.csdn.net/Yunwei_Zheng/article/details/104976637