hash
の選択 string
以上 ユースケースに応じて、多くの利点といくつかの欠点があります。ハッシュを選択する場合は、jsonオブジェクトをハッシュフィールドと次のような値として設計することをお勧めします。
127.0.0.1:6379> hset user:1 ssn 10101010101 name john surname wick date 2020-02-02 location continental
(integer) 5
127.0.0.1:6379> hgetall user:1
1) "ssn"
2) "10101010101"
3) "name"
4) "john"
5) "surname"
6) "wick"
7) "date"
8) "2020-02-02"
9) "location"
10) "continental"
hash
のメリットは次のとおりです 適切なデータモデリングを行うと、文字列を超えます。
- パフォーマンスの面では、文字列とハッシュの両方のほとんどのコマンドは同じ複雑さです。
- 文字列と比較すると、ハッシュ上の個々のjsonフィールドに簡単にアクセス/更新/削除できます。文字列全体を取得し、デコードし、変更を加えて、再度設定する必要はありません。オブジェクト全体を取得せずに、これらの操作にHDEL、HSET、またはHGETを使用できます。
- 文字列オブジェクトのサイズが大きくなると、オブジェクト全体を転送(取得/設定)するときにネットワークと帯域幅に問題が発生します。ドキュメントに記載されているとおり
RAMの速度とメモリ帯域幅は、特に小さなオブジェクトのグローバルパフォーマンスにとってそれほど重要ではないようです。大きなオブジェクト(> 10 KB)の場合は、目立つようになる可能性があります。
- データサイズを設計するための優れたベンチマークを作成する場合、ハッシュは文字列よりもメモリに適しています。ドキュメントとInstagramエンジニアリングのユースケースの例に記載されているように、特別なエンコーディングを使用すると大きなメリットが得られる可能性があります。
ハッシュ、リスト、整数のみで構成されるセット、およびソートされたセットは、指定された要素数よりも小さく、最大要素サイズまでの場合、最大10分の1のメモリを使用する非常にメモリ効率の高い方法でエンコードされます(5時間の少ないメモリ使用量が平均的な節約になります。
一方、ユースケースによっては;
ziplist
無料ではありません。メモリとCPUのトレードオフです。- ハッシュフィールドを部分的に期限切れにすることはできません。複数の文字列に分割する場合は、
EXPIRE
ただし、ハッシュでは、最上位のキーのみがすべての値で期限切れになります。