ホームページ  >  記事  >  データベース  >  Redis の 5 つの主要なデータ型とアプリケーション シナリオを理解するための 1 つの記事

Redis の 5 つの主要なデータ型とアプリケーション シナリオを理解するための 1 つの記事

咔咔
咔咔オリジナル
2020-08-28 17:16:172049ブラウズ

この記事で知識ポイントを学習する Redis の 5 つの主要なデータ型: string、hash、list、set、sorted_set 5 つの主要なタイプのそれぞれのアプリケーション シナリオ

##❞

# ❝

Kaka は、インタビュー ガイドを作成するためのロードマップをまとめ、そのロードマップに基づいて記事を書く準備をしましたが、後になって、補足されていない知識ポイントを追加していることに気づきました。また、パートナーの皆様にも情報の追加にご協力いただけることを楽しみにしております。コメントセクションでお会いしましょう!
Redis の 5 つの主要なデータ型とアプリケーション シナリオを理解するための 1 つの記事
ここに画像の説明を挿入

#1.string type

1-1 文字列型データの基本操作

追加/modify data:set key value

Get data:get key

Delete data:del key

複数のデータの追加/変更: mset key value key1 value1

複数のデータの取得: mget key key1

元データの末尾に情報を追加します(存在しない場合は追加します): キー値を追加

##1-2 文字列型増加および減少操作##指定された範囲内の値を増やすように値を設定します:

incr キーのデフォルトは毎回 1 ずつ増加します | incrby キーの値は毎回増加します新しい値が追加されます

指定範囲を減らすデータを設定します: decr key | decrby key 値は新しい値を追加するのと同じです

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

データベース テーブル (データベース テーブル) の主キー ID を制御します。データ テーブル内の主キーの一貫性を確保するための主キー生成戦略を提供します。

#1-3 文字列型エージング操作有効期限の設定: setex キーの秒値

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

期間限定の投票機能を実装します。たとえば、WeChat アカウントは 1 時間に 1 回投票できます。 EC業界の人気商品やニュースサイトで話題のニュースなど、ホットな情報を実感できます

1-4 文字列型のアプリケーション シナリオ

#Weibo big V のホームページへの高頻度のアクセス数ファンとフォロワーの数に応じて、Weibo 番号を随時更新する必要があります。これは高頻度の情報なので、redis の string 型を利用することで解決できます Redis の 5 つの主要なデータ型とアプリケーション シナリオを理解するための 1 つの記事 ユーザーの主キーと属性をキー値として、redis に Big V のユーザー情報を設定します 以下は実装例です。 Redis の 5 つの主要なデータ型とアプリケーション シナリオを理解するための 1 つの記事 ここで、キーの命名規則について簡単に説明する必要があります: テーブル名 主キー 主キー値 フィールド: フィールド値。このようなルールに従って名前を付けることで、キーの値を非常に適切に管理できます。

これを達成するために、別の方法を使用することもできます。つまり、キーの後に構造体を直接置くことです。たとえば、Redis の 5 つの主要なデータ型とアプリケーション シナリオを理解するための 1 つの記事 上記の 2 つの方法は実装できますが、最初の方法は、次の場合に非常に便利です。 any 1 つの値が管理され、2 つ目は毎回変更する必要があるため、ビジネス シナリオに応じて、定期的に更新するだけで済みます。

2. ハッシュ型

2-1 ハッシュ型データ Basic操作

#データの追加/変更:hset キー フィールド値

データの取得: hget キー フィールド | hgetall key

データの削除: hdel キー フィールド field1

追加/ 複数のデータを変更する: hmset key field value field1 value1

複数のデータを取得する: hmget key field field1

フィールドの数を取得するtable : hlen key

テーブルにフィールドが存在するかどうかを取得します: hexists key field

2 - 2 ハッシュ型データの拡張操作

ハッシュ テーブル内のすべてのフィールド値を取得: hkeys key

ハッシュ テーブル内のすべてのフィールド値を取得します: hvals キー

指定されたフィールドの値を設定し、指定された範囲の値を増やします: hincrby キー フィールド増分 | hincrbyfloat キー フィールド増分

2-3 ハッシュ ビジネス シナリオ ショッピング カート

この図のソースネットワークは自作ではないため、ショッピング カートのシナリオをシミュレートしているだけですRedis の 5 つの主要なデータ型とアプリケーション シナリオを理解するための 1 つの記事上の図では、ショッピング カート内の情報が表示されます。次に、redis を使用してこのショッピングを実装します。カート。

ショッピング カートの追加とショッピング カートの取得がここで実装されています。キーの名前は、テーブル名、主キー、主キーの値です。Redis の 5 つの主要なデータ型とアプリケーション シナリオを理解するための 1 つの記事上の図では、商品情報のストレージが次のようになります。また、製品を個別にハッシュする必要もあります。下図のようにプロダクトIDのみが格納されますRedis の 5 つの主要なデータ型とアプリケーション シナリオを理解するための 1 つの記事設定方法は複数のフィールドを設定する方法と直接jsonとして格納する方法の2つがあります。情報が頻繁に変更されない場合は、jsonRedis の 5 つの主要なデータ型とアプリケーション シナリオを理解するための 1 つの記事 を使用してメソッドhsetnx キー フィールドの値を提供できます。存在する場合は追加されず、存在しない場合は追加されます。この機能は、異なるユーザーが同じ商品を追加した場合に、上書きや無駄な操作を避けるために使用されます。

#3. リスト タイプ

#データ ストレージ要件: 複数のデータを保存し、データのストレージ スペースの順序を区別します。 必要なデータ構造:1つの記憶領域に複数のデータを格納し、入力順序をデータに反映できる リスト型: 複数のデータを保存します。最下層は二重リンクのリスト記憶構造を使用して実装します。

3-1 リスト型データの基本操作

データの追加/変更:

lpush キー値 value1 | rpush キー値 value1

データの取得:

lrange key start end | lindex キー インデックス | llen key

データの削除:

rpop key | lpop key# #<figure data-tool="mdnice编辑器" style="margin: 0; margin-top: 10px; margin-bottom: 10px; display: flex; flex-direction: column; justify-content: center; align-items: center;"><img src="https://img-blog.csdnimg.cn/20200525112247102.png" alt="Redis の 5 つの主要なデータ型とアプリケーション シナリオを理解するための 1 つの記事" style="max-width:90%"><figcaption style="margin-top: 5px; text-align: center; font-size: 13px;"><span style="background-image: url(https://img.alicdn.com/tfs/TB1Yycwyrj1gK0jSZFuXXcrHpXa-32-32.png); display: inline-block; width: 18px; height: 18px; background-size: 18px; background-repeat: no-repeat; background-position: center; margin-right: 5px; margin-bottom: -5px;">#ここに図の説明を挿入</span></figcaption></figure><h2 data-tool="mdnice编辑器" style="margin-top: 30px; margin-bottom: 15px; padding: 0px; color: black; font-size: 22px; border-bottom: 4px solid rgb(64, 184, 250);"> <span class="prefix" style="display: flex; width: 20px; height: 20px; background-size: 20px 20px; background-image: url(https://my-wechat.mdnice.com/fullstack-1.png); margin-bottom: -22px;"></span>3-2 リスト型データの拡張操作<span class="content" style="display: flex; color: #40B8FA; font-size: 20px; margin-left: 25px;"> </span><span class="suffix" style="display: flex; box-sizing: border-box; width: 200px; height: 10px; border-top-left-radius: 20px; background: RGBA(64, 184, 250, .5); color: rgb(255, 255, 255); font-size: 16px; letter-spacing: 0.544px; justify-content: flex-end; float: right; margin-top: -10px; box-sizing: border-box !important; overflow-wrap: break-word !important;"></span> </h2>指定された時間内にデータを取得および削除します: <p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 26px; margin-top: 10px; margin-bottom: 10px; font-size: 14px; word-spacing: 2px;">blpop key1 key2 timeout | brpop key1 key2 timeout<code style="overflow-wrap: break-word; margin: 0px 2px; font-family: " operator mono consolas monaco menlo monospace word-break: break-all color: rgb background: rgba padding: border-radius: height: line-height:>

この関数の単純なケースを作成します。簡単です。

#左側のターミナル コマンドが実行されると、削除されたデータが返されるまで 30 秒待機します。

右側の add コマンドが実行されると、左側は直接削除されたデータを返す

Redis の 5 つの主要なデータ型とアプリケーション シナリオを理解するための 1 つの記事

3-3 リスト ビジネス シナリオ # 以上で基本的な操作がわかりました。リストのlpopキーまたはrpopキーを実行して、doまたは右側から削除できますが、友人のサークル内でいいねビジネスが行われ、途中からデータが削除されるシナリオがあります。その場合は以下のようになります。

まず、list5 に b c d を追加します。 次にcを削除します 確認すると a b d だけが残ります

4. set type

新しいストレージ要件: 大量のデータを保存し、クエリの利便性を高めるために効率を向上させます。 必要なストレージ構造: 大量のデータを保存できる、効率的な内部ストレージ メカニズム、クエリが簡単 セットタイプ: ハッシュストレージ構造とまったく同じで、値ではなくキーのみを保存し(nil)、値の繰り返しは許可されません

Redis の 5 つの主要なデータ型とアプリケーション シナリオを理解するための 1 つの記事
ここに図を挿入 説明

4-1 セット型データの基本操作

追加/変更データ:sadd キー メンバー member1

データの取得:smembers key

データの削除:srem キー メンバー 1

収集データの総量を取得: スカード キー

###

指定されたデータがコレクションに含まれているかどうかを判断します: sismember key member

Redis の 5 つの主要なデータ型とアプリケーション シナリオを理解するための 1 つの記事
ここに画像の説明を挿入

4-2 セット型データ展開演算

##セット内の指定された数のデータをランダムに取得します:

srandmember key count

コレクション内の特定のデータをランダムに取得し、変更されたデータ セットをコレクションから削除します:

spop key

##4-3 セット型ビジネスシナリオお勧め情報話題の情報、話題のニュース、売れ筋旅行、アプリアプリのおすすめ、フォローアップのおすすめなどをランダムにプッシュします。

最近の Kaka Write ディスカスのため、このケースは注意喚起を目的としています。

ケース 1: 特定の推奨メカニズムに従って対応するユーザーをセットに格納し、毎回推奨する必要がある 2 人のユーザーをランダムに取得します

Redis の 5 つの主要なデータ型とアプリケーション シナリオを理解するための 1 つの記事
ここに画像の説明を挿入します。

ケース 2: 特定の推奨メカニズムに従って、対応するユーザーをセットに保存します。その後、日付に基づいて毎日推奨されるユーザーを繰り返すことはできません

Redis の 5 つの主要なデータ型とアプリケーション シナリオを理解するための 1 つの記事
ここに画像の説明を挿入

4-4 セット タイプ ビジネス シナリオ マイニング ユーザー関係

2 つのセットの共通部分、和集合、および差分

<span style="display: block; background: url(https://my-wechat.mdnice.com/point.png); height: 30px; width: 100%; background-size: 40px; background-repeat: no-repeat; background-color: #272822; margin-bottom: -7px; border-radius: 5px; background-position: 10px 10px;"></span><code class="hljs" style="overflow-x: auto; padding: 16px; color: #ddd; display: -webkit-box; font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; font-size: 12px; -webkit-overflow-scrolling: touch; letter-spacing: 0px; padding-top: 15px; background: #272822; border-radius: 5px;"><span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">sinter</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">key</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">key1</span><br/><span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">sunion</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">key</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">key1</span><br/><span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">sdiff</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">key</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">key1</span><br/></code>

2 つのセットの共通部分、和集合、および差分は、指定されたセットに格納されます

#
<span style="display: block; background: url(https://my-wechat.mdnice.com/point.png); height: 30px; width: 100%; background-size: 40px; background-repeat: no-repeat; background-color: #272822; margin-bottom: -7px; border-radius: 5px; background-position: 10px 10px;"></span><code class="hljs" style="overflow-x: auto; padding: 16px; color: #ddd; display: -webkit-box; font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; font-size: 12px; -webkit-overflow-scrolling: touch; letter-spacing: 0px; padding-top: 15px; background: #272822; border-radius: 5px;"><span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">sinterstore</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">destination</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">key1</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">key2</span><br/><span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">sunionstore</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">destination</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">key1</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">key2</span><br/><span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">sdiffstore</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">destination</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">key1</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">key2</span><br/></code>

Redis の 5 つの主要なデータ型とアプリケーション シナリオを理解するための 1 つの記事ケース: 共通の友人から情報を採掘する必要があります。たとえば、WeChat 公開アカウントで共同でフォローしている友人の数、新しい友人を追加するための QQ の推奨メカニズム、ユーザーの直接接続の詳細なマイニングなどです。

上記のケースに基づいて、差分セットを使用して次のことを行うことができます。 QQ の友達はお互いを知っている可能性が高いことがわかります。

4-5 Web サイトの PV UV IP レコードを実装するセット タイプのビジネス シナリオ

PV は文字列タイプ incr を直接使用します統計情報 つまり、

UV と IP は独立していて繰り返されず、set を使用して操作します。

上で、集合には反復できないという特性があることが分かりましたので、これに基づいてこの関数を簡単に実装できます。次に、スカーキーを使用して数量を数えます。

独立訪問者としての UV については、ローカル Cookie を使用してそれを実現できます。同様に、記録のために Cookie を Redis に渡しますRedis の 5 つの主要なデータ型とアプリケーション シナリオを理解するための 1 つの記事

5.sorted_set タイプ

前の 4 つのタイプはいずれも並べ替えをサポートしていません。以下で説明するsorted_set タイプは、ビッグ データのストレージと並べ替えの両方をサポートしています。 function

5-1.sorted_set 型の基本操作

##データの追加:

zadd キースコアメンバー

データの取得:

zrange キー スタート ストップ | zrevrange キー スタート ストップ

データの削除: zrem キー メンバー

Redis の 5 つの主要なデータ型とアプリケーション シナリオを理解するための 1 つの記事条件に基づいてデータを取得: zrangebyscore key min max limit | zrevrangescore key max min

データの条件付き削除: zremrangebyrank key start stop | zremrangebyscore key min max

収集データの総量の取得: zcard key | zcount key min max

交差と結合の操作を設定します: zinterstore destination numkeys key | zunionstore destination numkeys key(このコマンドはデモされません。ドキュメントを自分で確認できます。これは set と似ていますが、すべての交差の合計が与えられます。それを加算します。次に、ここに数字キーがあります。このパラメータは、計算用のいくつかのキーの合計です。必要なキーの数は後で必要になります)

データに対応するインデックスを取得します: zrank キー メンバー | zrevrank キー メンバー

socre 値の取得と変更: zscore キー メンバー | Zincrby キー インクリメント メンバー

関連推奨事項: "<a href="https://www.php.cn/redis/" target="_blank">redis チュートリアル</a>"

概要

上記は、redis データ型の簡単な紹介と具体的なアプリケーションです。次の記事では、特定のニーズに基づいて実際の戦闘を実行します。

学習の継続、ブログの継続、共有の継続は、カカがそのキャリア以来常に支持してきた信念です。巨大なインターネット上のカカの記事がそうであることを願っています。 Silk のお手伝いをします。また次回お会いしましょう。

以上がRedis の 5 つの主要なデータ型とアプリケーション シナリオを理解するための 1 つの記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。