Redis のデータ構造の詳細な分析とアプリケーション シナリオについての説明

青灯夜游
リリース: 2022-01-18 09:51:45
転載
1976 人が閲覧しました

この記事では、Redis のデータ構造を深く理解し、これらのデータ構造のアプリケーション シナリオを確認します。お役に立てば幸いです。

Redis のデータ構造の詳細な分析とアプリケーション シナリオについての説明

Redis データ型とアプリケーション シナリオ

Redis は、ANSI C 言語で書かれた Key-Value ストレージ システムです。 キーのタイプは文字列です。 [関連する推奨事項: Redis ビデオ チュートリアル ]

値のデータ型の 8 つのデータ型:

  • 一般的なデータ型

    • string 文字列タイプ

    • #list リスト タイプ

    • set コレクション タイプ

    • sortedset(zset) 順序付きセット タイプ

    • ##ハッシュ タイプ
    • #一般的でないデータ タイプ
  • #bitmap ビットマップ タイプ

    • 地理位置タイプ

    • ストリーム タイプ

    • Note
    Redis のコマンドは大文字と小文字を無視します (SET を設定)、キーは大文字と小文字を無視しません (NAME 名)
  • # #string string type

Redis の String は、文字列、整数、浮動小数点数の 3 種類の値を表現できます。100.01 は 6 桁の文字列ですRedis のデータ構造の詳細な分析とアプリケーション シナリオについての説明

一般的なコマンド

コマンド名

コマンド形式コマンドの説明#set set key valueAssignmentgetget keyGet the valuegetsetgetset key value値を取得して値を割り当てる複数の key指定されたすべて (1 つ以上) のキーの値を返しますキーの有効期限 (秒) を設定します値を末尾に追加#strlenstrlen key文字列の長さを取得setnxsetnx キー値値が存在しない場合に割り当てが使用されますset キー値 NX PX 3000 のアトミック操作、px はミリ秒数##incrbyincrby key increment指定した整数を増やすdecrdecr key数値を減らすdecrbydecrby key decrement指定された整数を減少させます

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

  • 1. オブジェクト キャッシュ

  • 2. 単一値キャッシュ

  • 3. incr はオプティミスティック ロックに使用されます。 incr: 増分番号は、オプティミスティック ロック監視 (トランザクション) の実装に使用できます。

  • 4. setnx は分散に使用されます。値が存在しない場合のロック 割り当てが存在する場合は使用され、分散ロックの実装に使用できます。および Web クラスターのセッション共有

  • 一般的なメソッドの例
  • dockerRedis:0>keys *
    dockerRedis:0>append testName 2
    "1"
    dockerRedis:0>exists testName
    "1"
    dockerRedis:0>append testName " 1234"
    "6"
    dockerRedis:0>get testName
    "2 1234"
    dockerRedis:0>set testName1 "testName1"
    "OK"
    dockerRedis:0>get testName1
    "testName1"
    dockerRedis:0>getset testName2 "testName2"
    null
    dockerRedis:0>get testName2
    "testName2"
    dockerRedis:0>strlen testName
    "6"
    dockerRedis:0>set incrTest "10"
    "OK"
    dockerRedis:0>incr incrTest
    "11"
    dockerRedis:0>get incrTest
    "11"
    dockerRedis:0>decr incrTest
    "10"
    dockerRedis:0>decrby incrTest 5
    "5"
    dockerRedis:0>mset set01 1 set02 2 set03 3
    "OK"
    dockerRedis:0>mget set01 set02 set03
    1) "1"
    2) "2"
    3) "3"
    ログイン後にコピー

    list リスト タイプ

  • リスト タイプは、順序付けされたデータを保存できます。先頭または末尾近くの要素を取得するための反復可能な要素 レコードは、最大要素数 2^32-1 (40 億) の非常に高速なリストです

#一般的なコマンド

コマンド名

コマンド形式コマンドの説明

#mset MSET key1 value1 key2 value2 .. keyN valueN
の値を対応する値に設定します。 mgetMGET KEY1 KEY2 .. KEYN
EXPIRE EXPIRE key 秒数
append キー値を追加
incr incrキー
##増分番号
lpoprpushrpoplpushxblpopllenlrangelsetlset key Index valueリストのインデックス位置の要素を値に設定します値のrpoplpushrpoplpush key1 key2key1 リストの右側からポップアップし、key2 の左側に挿入しますlistrpushxrpushx keyリストの末尾に値を挿入します。 value brpopblpop key リストの右側から取り出し、リストが空のときにブロックします。最大ブロック タイムアウトは秒単位で設定できます lindexlindex キー値リスト内の添字がインデックスである要素を取得します。インデックスは 0 から始まります。indexltrimltrim key start endリストをトリミングし、開始から終了までの範囲 end のみを保持しますbrpoplpushlinsert key BEFORE がブロックされます。 /AFTER ピボット値##アプリケーション シナリオ2、キュー (キュー) = LPUSH RPOP
##lpush lpush key v1 v2 v3. .. 左側からリストを挿入
lpop key リストの左側から削除
rpush key v1 v2 v3 ... リストを右側から挿入
rpop key リストの右側から取得します
lpushx キーの値 値をリストの先頭に挿入します
blpop キーのタイムアウト Takeリストの左側からそれを選択し、リストが空のときにブロックします。最大ブロック時間を秒単位で設定できます。
llen キー リスト内の要素の数を取得します
lrange key start end リスト内の指定された範囲の要素を返します範囲はstartとendで指定します
brpoplpush
key1 リストの右側からポップし、key2 リストの左側に挿入します。これにより、key1 key2 linsert
値ピボットの前後に値をリストに挿入
1 、スタック (スタック) = LPUSH LPOP

#3、ブロッキングMQ (ブロッキング キュー) = LPUSH BRPOP

  • 4、ユーザー リスト、製品リスト、コメント リスト

  • セット セット タイプ

    Set: 順序なし、一意の要素セット内のメンバーの最大数は 2^32 - 1
  • 共通コマンド

  • コマンド名

コマンド形式

##コマンド説明

sadd

sadd key value1 value2 .... 要素をコレクション キーに保存します。要素が存在する場合は無視されます。キーが存在しない場合は、新しいキーを作成します。sremsrem key value1 value2 ....コレクションから要素を削除 key# #コレクション内のすべての要素を取得 ##spop#spop key count##設定されたキーから count 個の要素を選択し、キーから要素を削除します設定されたキーから count 個の要素を選択します。要素はキーから削除されません#scard##sismembersintersdiffsunion

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

  • WeChat 宝くじミニ プログラム

  • ##Weibo のいいね、コレクション、タグ

  • Weibo WeChat フォローモデル

  • E コマース製品スクリーニング

zset 注文セット タイプ

SortedSet (ZSet) 順序セット: 要素自体は順序付けされておらず、繰り返しもありません。 各要素はスコア (スコア) に関連付けられており、スコアごとに並べ替えることができ、スコアを繰り返すことができます。

共通コマンド

#smembers smembers key
#srandmember srandmember key count
#scard key コレクション キー内の要素の数を取得します
#sismember key member コレクション key にメンバー要素が存在するかどうかを判定
sinter key1 key2 key3 Find複数のセットの共通部分
sdiff key1 key2 key3 複数のセットの差分を見つける
sunion key1 key2 key3 複数のセットの差分を見つける Union
コマンド名コマンド形式コマンド説明#zaddzremzcardzcountzincrby##zscorezscore キー メンバー 順序付きセット key 内の要素メンバーのスコアを返しますzrankzrank キー メンバーセット内のメンバーのスコアを取得します。 ランキング (スコアによる小から大まで)zrange key start endzrevrank キー メンバー zrevrange key start end#アプリケーションシナリオ
zadd key スコア1 メンバー1 スコア2 member2 ... スコア付けされた要素を順序付きセットに追加します key
zrem key mem1 mem2.... From 順序付きセットから要素を削除する key
zcard key 順序付きセット内の要素の数を取得する
zcount key min max スコア値が [min,max] 間隔内にあるコレクション内の要素の数を返します
zincrby キー インクリメント メンバー は、順序付きセット キー内の要素メンバーのスコアにインクリメントを加えたものです
#zrange
start 添字から stop 添字を持つ要素までの正の順序でオーダード セット キーを取得します zrevrank
順位を取得しますセット内のメンバー (スコアに基づいて大きいものから小さいものまで) zrevrange
順序付きセット キーの要素を取得します開始添え字から終了添え字まで逆順に

クリックランキング、売上ランキング、注目度ランキング

ハッシュ タイプ
  • Redis ハッシュは、文字列タイプのフィールドと値のマッピング テーブルであり、フィールドとフィールド値のマッピングを提供します。各ハッシュには 2^32-1 のキーと値のペア (40 億以上) を保存できます。

#利点

Redis のデータ構造の詳細な分析とアプリケーション シナリオについての説明

    1. 類似したデータが分類され、統合されて保存されるため、データ管理が容易になります
  • ##2. 文字列操作と比較して、メモリと CPU の消費量が少なくなります。
    • ##3. 文字列ストレージと比較して、スペースを節約できます。

    • 欠点
    • 1. 有効期限関数はフィールドでは使用できませんが、キーでのみ使用できます
  • 2. Redis クラスター アーキテクチャは大規模な使用には適していません

    • ##一般的なコマンド
    ##コマンド名
コマンド形式

コマンド説明

#hsethset key field valueハッシュテーブルのキー値の格納 keyhmsethmset key field1 value1 field2 value2ハッシュ テーブル内 key に複数のキーと値のペアを格納しますhgethget key fieldフィールドが存在するかどうかを確認しますhmgethmget key field1 field2 ...フィールド値の取得hsetnxhsetnx キー フィールドの値存在しないハッシュ テーブルのキー値を格納します。 keyhexistshexists key filedフィールドが存在するかどうかを確認するhgetallhgetall key複数のフィールド値を取得するhdel キー フィールド 1 フィールド 2...hincrby キー フィールドの増分hlen キー## アプリケーション シナリオ #オブジェクト キャッシュショッピング カートの操作
# #hdel
指定されたフィールドを削除します hincrby
増分以降のフィールドを指定 hlen
フィールド数の取得

bitmap ビットマップ タイプ ビットマップは、ビット操作を実行して、要素に対応する値または状態をビットで表します。キーは対応する要素そのものです。ビットマップ自体はストレージ容量を大幅に節約します。

  • よく使用されるコマンド

  • コマンド名
コマンド形式

コマンドの説明

setbitsetbit key offset value#getbitgetbit key offsetオフセットのキーのビット値を取得#bitposbitpos キーの値Returnビット値として設定される最初のインデックス値bitopbitop and[or/xor/not] destkey key [key ...]複数のキーに対して論理演算を実行し、それらを destkey に保存します

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

  • 1. ユーザーは毎月チェックインします。ユーザー ID がキーで、日付はチェックインを示すオフセット 1 として使用されます
  • 2. 統計はアクティブ ユーザー、日付がキー、ユーザー ID はオフセット 1、つまりアクティブであることを意味します
  • 3. ユーザーのオンライン ステータスをクエリします、日付がキー、ユーザー ID はオフセット 1 は、オンラインを意味します

geolocation type

geo は、Redis が位置情報を処理するために使用します。 Redis3.2で正式に使用されています。主に Z オーダー カーブ、Base32 エンコーディング、ジオハッシュ アルゴリズムを使用します。

共通コマンド

オフセットにキーのビット値を設定します (0 または 1 のみ可能)。
##bitcount bitcount key 1 であるキー ビットの数を取得します
##geoaddgeoadd キー経度緯度メンバー名 1 経度 1 緯度 1 メンバー名 2 経度 2 緯度 2 ...地理座標の追加geoposgeopos キー メンバー名 1 メンバー名 2...メンバーの緯度と経度を返すgeodist geodist キー メンバー 1 メンバー 2 ユニットメンバー間の距離の計算georadiusbymembergeoradiusbymember キー メンバーの値の単位カウント番号 asc [desc]メンバーに基づいて近くのメンバーを検索geohashgeohash キー メンバー名 1 メンバー名 2...標準の geohash 文字列を返す
コマンド名 コマンドフォーマット コマンド説明



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

1. 地理的位置を記録する

2. 距離を計算する

3.「近くにいる人」を探す

ストリーム データ フロー タイプ

ストリームは、Redis5.0 以降の新しいデータ構造で、永続的なメッセージ キューに使用されます。

以下を含むメッセージ キューのすべての内容をほぼ満たします。

メッセージ ID のシリアル化生成
  • メッセージ トラバーサル
  • メッセージのブロックノンブロッキング読み取り
  • メッセージのグループ消費
  • 未完了メッセージの処理
  • メッセージ キューの監視
  • 各ストリームには一意の名前が付いています。これは Redis のキーであり、xadd コマンドを初めて使用してメッセージを追加するときに自動的に作成されます。

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

メッセージ キューの使用法

その他のプログラミング関連の知識については、

プログラミング入門

をご覧ください。 !

以上がRedis のデータ構造の詳細な分析とアプリケーション シナリオについての説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:juejin.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート