❝この記事で知識ポイントを学習する Redis の 5 つの主要なデータ型: string、hash、list、set、sorted_set 5 つの主要なタイプのそれぞれのアプリケーション シナリオ
##❞
Kaka は、インタビュー ガイドを作成するためのロードマップをまとめ、そのロードマップに基づいて記事を書く準備をしましたが、後になって、補足されていない知識ポイントを追加していることに気づきました。また、パートナーの皆様にも情報の追加にご協力いただけることを楽しみにしております。コメントセクションでお会いしましょう! ❞
追加/modify data:set key value
Get data:get key
Delete data:del key
複数のデータの追加/変更: mset key value key1 value1
複数のデータの取得: mget key key1
元データの末尾に情報を追加します(存在しない場合は追加します): キー値を追加
指定範囲を減らすデータを設定します: decr key | decrby key 値は新しい値を追加するのと同じです
データベース テーブル (データベース テーブル) の主キー ID を制御します。データ テーブル内の主キーの一貫性を確保するための主キー生成戦略を提供します。
「アプリケーション シナリオ」
期間限定の投票機能を実装します。たとえば、WeChat アカウントは 1 時間に 1 回投票できます。 EC業界の人気商品やニュースサイトで話題のニュースなど、ホットな情報を実感できます
#Weibo big V のホームページへの高頻度のアクセス数ファンとフォロワーの数に応じて、Weibo 番号を随時更新する必要があります。これは高頻度の情報なので、redis の string 型を利用することで解決できます ユーザーの主キーと属性をキー値として、redis に Big V のユーザー情報を設定します 以下は実装例です。 ここで、キーの命名規則について簡単に説明する必要があります: テーブル名 主キー 主キー値 フィールド: フィールド値。このようなルールに従って名前を付けることで、キーの値を非常に適切に管理できます。
これを達成するために、別の方法を使用することもできます。つまり、キーの後に構造体を直接置くことです。たとえば、 上記の 2 つの方法は実装できますが、最初の方法は、次の場合に非常に便利です。 any 1 つの値が管理され、2 つ目は毎回変更する必要があるため、ビジネス シナリオに応じて、定期的に更新するだけで済みます。
#データの追加/変更:hset キー フィールド値
データの取得: hget キー フィールド
| hgetall key
データの削除: hdel キー フィールド field1
追加/ 複数のデータを変更する: hmset key field value field1 value1
複数のデータを取得する: hmget key field field1
フィールドの数を取得するtable : hlen key
テーブルにフィールドが存在するかどうかを取得します: hexists key field
ハッシュ テーブル内のすべてのフィールド値を取得: hkeys key
ハッシュ テーブル内のすべてのフィールド値を取得します: hvals キー
指定されたフィールドの値を設定し、指定された範囲の値を増やします: hincrby キー フィールド増分
| hincrbyfloat キー フィールド増分
この図のソースネットワークは自作ではないため、ショッピング カートのシナリオをシミュレートしているだけです上の図では、ショッピング カート内の情報が表示されます。次に、redis を使用してこのショッピングを実装します。カート。
ショッピング カートの追加とショッピング カートの取得がここで実装されています。キーの名前は、テーブル名、主キー、主キーの値です。上の図では、商品情報のストレージが次のようになります。また、製品を個別にハッシュする必要もあります。下図のようにプロダクトIDのみが格納されます設定方法は複数のフィールドを設定する方法と直接jsonとして格納する方法の2つがあります。情報が頻繁に変更されない場合は、json を使用してメソッドhsetnx キー フィールドの値
を提供できます。存在する場合は追加されず、存在しない場合は追加されます。この機能は、異なるユーザーが同じ商品を追加した場合に、上書きや無駄な操作を避けるために使用されます。
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 コマンドが実行されると、左側は直接削除されたデータを返す
まず、list5 に b c d を追加します。 次にcを削除します 確認すると a b d だけが残ります
新しいストレージ要件: 大量のデータを保存し、クエリの利便性を高めるために効率を向上させます。 必要なストレージ構造: 大量のデータを保存できる、効率的な内部ストレージ メカニズム、クエリが簡単 セットタイプ: ハッシュストレージ構造とまったく同じで、値ではなくキーのみを保存し(nil)、値の繰り返しは許可されません
追加/変更データ:
sadd キー メンバー member1
データの取得:
smembers key
データの削除:
srem キー メンバー 1
収集データの総量を取得:
スカード キー
指定されたデータがコレクションに含まれているかどうかを判断します: sismember key member
srandmember key count
spop key
最近の Kaka Write ディスカスのため、このケースは注意喚起を目的としています。
ケース 1: 特定の推奨メカニズムに従って対応するユーザーをセットに格納し、毎回推奨する必要がある 2 人のユーザーをランダムに取得します
ケース 2: 特定の推奨メカニズムに従って、対応するユーザーをセットに保存します。その後、日付に基づいて毎日推奨されるユーザーを繰り返すことはできません
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>
ケース: 共通の友人から情報を採掘する必要があります。たとえば、WeChat 公開アカウントで共同でフォローしている友人の数、新しい友人を追加するための QQ の推奨メカニズム、ユーザーの直接接続の詳細なマイニングなどです。
上記のケースに基づいて、差分セットを使用して次のことを行うことができます。 QQ の友達はお互いを知っている可能性が高いことがわかります。
PV は文字列タイプ incr を直接使用します統計情報 つまり、
UV と IP は独立していて繰り返されず、set を使用して操作します。
上で、集合には反復できないという特性があることが分かりましたので、これに基づいてこの関数を簡単に実装できます。次に、スカーキーを使用して数量を数えます。
独立訪問者としての UV については、ローカル Cookie を使用してそれを実現できます。同様に、記録のために Cookie を Redis に渡します
前の 4 つのタイプはいずれも並べ替えをサポートしていません。以下で説明するsorted_set タイプは、ビッグ データのストレージと並べ替えの両方をサポートしています。 function
zadd キースコアメンバー
zrange キー スタート ストップ | zrevrange キー スタート ストップ
データの削除: zrem キー メンバー
条件に基づいてデータを取得: 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 サイトの他の関連記事を参照してください。