データの追加/変更: キー値の設定
get key
複数のデータの追加/変更: mset key value key1 value1
mget key key1
指定された範囲内の値を増やすように値を設定します: incr キーのデフォルトは毎回 1 ずつ増加します | 新しい値が追加されるたびに incrby キーの値
データを設定します指定範囲を減らすには: decr key | decrby key value は新しい値を追加するのと同じです
アプリケーション シナリオ
データベース テーブル ID の主キーを制御し、データベース テーブルの主キー生成戦略を提供して、データ テーブルの主キーの一貫性を確保します。
setex キーの秒値
アプリケーション シナリオ
時間制限のある投票機能の実現: たとえば、WeChat 投票は 1 時間に 1 回行うことができます
ホットな実現情報: 例: eコマース 業界で人気の製品、ニュース Web サイトで人気のニュース
Weibo big V ホームページ 頻繁にアクセスするには、ファン、フォロワー、Weibo の数を随時更新する必要があります。これは高頻度の情報なので、redis の文字列型を利用することで解決できます
ユーザーの主キーと属性をキー値として、redis に big V のユーザー情報を設定します。導入事例です。
ここで、キーの命名規則について簡単に説明する必要があります: テーブル名 主キー 主キー値 フィールド: フィールド値。このようなルールに従って名前を付けることで、キーの値を非常に適切に管理できます。
別の方法を使用してこれを実現することもできます。これは、キーの後に構造体を直接続けることです。たとえば、
上記のどちらの方法でも、次のことが可能です。はい、最初の値は任意の値を簡単に管理できるのに対し、2 番目の値は毎回変更する必要があるというだけです。ビジネス シナリオに応じて、定期的に更新できます。
hset キー フィールド値
hget キー フィールド |
hgetall キー
hdel キー フィールド field1
複数のデータの追加/変更: hmset キー フィールド value field1 value1
hmget key field field1
hlen key
hexists キー フィールド
ハッシュ テーブル内のすべてのフィールド値を取得します: hkeys key
ハッシュ テーブル内のすべてのフィールド値を取得します。 hvals key
指定したフィールドの値を設定して、指定した範囲の値を増やします: hincrby key field increment
| hincrbyfloat キー フィールドの増分
この画像はインターネットから取得したもので、自家製ではありません。ショッピング カートのシーンをシミュレートしているだけです。
上の画像では、ショッピング カート内の情報が表示されています。 , これを処理するために Redis を使用します. ショッピング カートの実装。
これは、ショッピング カートの追加とショッピング カートの取得の実装です。キーの名前は、テーブル名、主キー、主キーの値です。
上記では、テーブル名、主キー、主キーの値という名前が付けられています。問題の 1 つは、製品情報のストレージに多くの重複が存在するため、製品を個別にハッシュする必要があることです。以下の図に示すように、ここでは製品 ID
のみを指定します。1 つは複数のフィールドを設定する方法、もう 1 つは直接 json として保存する方法です。情報が頻繁に変更されない場合は、json
を使用してメソッドhsetnx キー フィールドの値
を提供できます。存在する場合は追加されません。存在しない場合は追加されません。 、追加されます。この機能は、異なるユーザーが同じ商品を追加した場合に、上書きや無駄な操作を避けるために使用されます
データストレージ要件: 複数のデータを保存し、データのストレージスペースの順序を区別します。
必要なデータ構造: 1 つのストレージスペースに複数のデータを保存し、エントリの順序をデータを通じて反映できます
リスト型: 複数のデータを保存します。最下層は二重リンクリスト格納構造を使用して実装します。
lpush キー値 value1 |
rpush キー値 value1
データの取得: lrange キー start end
| lindex キー インデックス
| llen key
データの削除: rpop key
| lpop key
指定された時間内にデータを取得および削除します: blpop key1 key2 timeout | brpop key1 key2 timeout
この関数の単純なケースを作成します。わかりやすい
#左側のターミナル コマンドを実行すると、削除されたデータが返されるまで 30 秒待機します。
右側の add コマンドが実行されます。 左側は削除されたデータを直接返します。
最初に a b c d
を list5 に追加し、次に c を削除します
確認すると、a b d だけが残ります
新しいストレージ要件: 大量のデータを保存し、クエリの利便性を高めるために効率を向上させます
必要なストレージ構造: 大量のデータを保存できる、効率的な内部ストレージメカニズム、クエリが簡単
set タイプ: ハッシュストレージ構造とまったく同じ、値ではなくキーのみを格納し (nil)、値の繰り返しは許可されません
追加/modify data:sadd キーメンバー member1
データの取得: smembers key
データの削除: srem key member1
コレクションデータの総量を取得: scard key
コレクションに指定したデータが含まれているかどうかを判定: sismember key member
セット内の指定された数のデータをランダムに取得します: srandmember key count
コレクション内の特定のデータをランダムに取得し、コレクションから新しいデータ セットを削除します: spop key
ケース 1: 特定の推奨メカニズムに従って対応するユーザーをセットに格納し、毎回推奨する必要がある 2 人のユーザーをランダムに取得します
ケース 2: 特定の推奨メカニズムに従ってセットに対応するユーザーを保存し、日付に基づいて毎日推奨されるユーザーを繰り返すことはできません
sinter key key1 sunion key key1 sdiff key key1
sinterstore destination key1 key2 sunionstore destination key1 key2 sdiffstore destination key1 key2
案例:我们需要挖掘一个信息的共同好友。例如微信公众号的共同关注好友数量、QQ添加新好友的推荐机制、深度挖掘用户直接的联系
就根据上述案例,我们可以使用差集来实现qq的有可能认识的好友。
PV直接使用string类型的incr统计即可
UV和IP都是独立不重复的,使用set来操作。
在上边我们知道set有一个特性就是不能重复,我们就可以根据这一点来轻松实现这个功能。然后使用scard key 来统计数量。
独立訪問者としての UV については、ローカル Cookie を使用してそれを実現できます。同様に、記録のために Cookie を Redis に渡します
前の 4 つのタイプはいずれも並べ替えをサポートしていません。以下で説明するsorted_set タイプは、ビッグ データのストレージと並べ替えの両方をサポートしています。 function
データの追加:zadd キー スコア メンバー
データの取得: zrange キー スタート ストップ | zrevrange キー スタート ストップ
データの削除: zrem キー メンバー
条件に基づいてデータを取得: zrangebyscore キーの最小最大制限| 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 と似ていますが、次の点が異なります。すべての交差の合計が加算されます。次に、numkeys があります。このパラメータは、計算に必要なキーの合計数です。必要なキーの数は後で必要になります)
対応するインデックスを取得しますデータへ:zrank キー メンバー | zrevrank キー メンバー
socre 値の取得と変更: zscore キー メンバー | Zincrby キー インクリメント メンバー
上記は、redis データ型の簡単な紹介と具体的なアプリケーションです。次の記事では、実際の戦闘は特定のニーズに基づいて実行されます。
以上がRedis の 5 つの主要なデータ型とアプリケーション シナリオを理解するための 1 つの記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。