この記事では、redis のハッシュ データ型を理解し、ハッシュ型データの基本的な操作を紹介します。
最初にこの例を見てみましょう
前のセクションで文字列ストレージ型について一緒に学びましょう。しかし、オブジェクトデータの保存場所に頻繁な更新が必要な場合、操作が煩雑になります。例: user:id:100 -> {"id":100,"name":"Spring Festival Gala","fans":12355,"blogs":99,"focus:83}
, if オブジェクト内のローカル データを更新する必要がある場合は、すべてのデータを置き換える必要があるため、次の要件があります。[関連する推奨事項: Redis ビデオ チュートリアル ]
新しい要件: オブジェクトに関する情報の保存など、管理を容易にするために一連の保存データをグループ化します。 必要なストレージ構造 : 1 つのストレージ スペースに複数のキーと値のペアのデータを保存します
以下に示すように :
この問題を解決するために、新しいデータ型 hash
を導入します。構造も次のように最適化されています
hset key field value
# 查询单个字段数据 hget key field # 查询所有数据 hgetall key
hdel key field1 [field2]
hmset key field1 value1 field2 value2
hmget key field1 field2
hlen key
hexists key field
hkey key hvals key
hincrby key field increment hincrbyfloat key field increment
#4. ハッシュの適用例
ここでは、ショッピング カートとデータベース間の永続的な同期や、ショッピング カートと注文の関係については説明しません。また、ログインしていないユーザーのショッピング カート情報の保存については無視します。 Redis ストレージ モデルは、ショッピング カート内のアイテムの 追加、参照、数量変更、削除、クリアにのみ使用されます
実装計画
顧客 ID をキーとして、各ユーザーはショッピング カート情報に対応するハッシュ ストレージ構造を作成します。
製品番号をフィールドとして、購入数量をストレージの値として使用します# 001 用户购买 ID为101商品 100件,ID为102的商品 200件 hmset 001 101 100 102 200 # 002 用户购买 ID为102商品 1件,ID为104的商品 7件 hmset 002 102 1 104 7
現在Redis には数量のみが保存されますが、データベース内で製品情報を照会する必要があるため、プロセスは高速化されません。次の解決策を使用できます。 各ショッピング カートの製品情報レコードは 2 つのフィールドとして保存されます。
フィールド 1 は数量を保存するために特別に使用されます# 001 用户 购买 ID为101的商品 2件,商品的信息为:{"name":"good name"} hmset 001 101:num 2 101:info "{\"name\":\"goods name\"}" # 002 用户 购买 ID为101的商品 1件,商品的信息为:{"name":"good name"} hmset 002 101:num 1 101:info "{\"name\":\"goods name\"}"
上記の
101:infoに相当する値は、文字列にスペースが含まれるため、引用符で囲みます。エスケープの目的を達成するために、二重引用符を使用します。
製品情報は独立して保存されます
フィールド 2 は複数の製品レコードに存在する可能性があるため、フィールド 2 のデータは独立したハッシュに保存できます。このとき、ショッピングカートのレコードを追加するたびにハッシュデータを保存するのは明らかに無理です。hsetnx 操作でデータを保存できます。データが存在する場合、保存操作は実行されません。 。
コマンドの形式は次のとおりです<pre class="brush:js;toolbar:false;">hsetnx key field value</pre>
コード例は次のとおりです
# 将id为101 的商品独立存起来 hsetnx info 101 "{\"name\":\"goods name\"}"
案例:双 11 活动日,销售手机充值卡的商家对移动、联通、电信的 30 元、50 元、100 元商品推出抢购活动,每种商品的抢购上限为 100。
解决方案
实现过程
商品初始信息
# p01商家下,c30充值券1000张,c50充值券1000张,c100充值券1000张 hmset p01 c30 1000 c50 1000 c100 1000
当 c30 售出1件时,值减 1; 当 c100 售出 20 件时,值减 20,如下代码
# p01商家,商品c30售出1件 hincrby p01 c30 -1 # p01商家,商品c100售出20件 hincrby p01 c100 -20
string 存储 json 字符串:读取方便,在更新的时候会整体进行更新
hash 存对象具体的字段:更新灵活
引入 hash 数据类型之后,我们就解决了 string 存储对象,更新对象时需要整体更新的问题。
更多编程相关知识,请访问:编程入门!!
以上がRedis のハッシュ データ型とその操作方法について話しましょう。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。