ホームページ  >  記事  >  データベース  >  Redis メモリの最適化方法の概要

Redis メモリの最適化方法の概要

尚
転載
2019-11-30 15:36:511783ブラウズ

Redis メモリの最適化方法の概要

1. 特別なエンコーディング:

Redis 2.2 以降、特別なエンコーディングを通じて多くのデータ型をストレージ領域に合わせて最適化できます。このうち、ハッシュ、リスト、および整数で構成されるセットはすべてこの方法を使用してストレージ構造を最適化し、占有スペースを減らすことができ、場合によっては 9/10 のスペースを節約できます。 (推奨: redis ビデオ チュートリアル )

これらの特別なエンコーディングは、Redis の使用に対して完全に透過的であり、実際には、CPU とメモリ間の単なるトランザクションです。メモリ使用量が多ければ、データを操作する際に消費する CPU も当然多くなりますし、その逆も同様です。 Redis は、特別なエンコードに関連するさまざまなしきい値を設定するための設定パラメーターのセットを提供します (例:

#如果Hash中字段的数量小于参数值,Redis将对该Key的Hash Value采用特殊编码。
hash-max-zipmap-entries 64
#如果Hash中各个字段的最大长度不超过512字节,Redis也将对该Key的Hash Value采用特殊编码方式。
hash-max-zipmap-value 512
#下面两个参数的含义基本等同于上面两个和Hash相关的参数,只是作用的对象类型为List。
list-max-ziplist-entries 512
list-max-ziplist-value 64
#如果set中整型元素的数量不超过512时,Redis将会采用该特殊编码。
set-max-intset-entries 512

エンコードされた値が、変更後に構成情報の最大制限を超えた場合、Redis は自動的に通常のエンコード形式に変換します。この操作は非常に高速です。ただし、逆に操作して、大きな値の通常のエンコードを特殊なエンコードに変換する場合、Redis の提案では、正式に実行する前に、最初にそれを実行することが最善です。このような変換は多くの場合非常に非効率的であるため、最初に変換効率を単純にテストしてください。

2. BIT およびバイト レベルの操作:

Redis 2.2 以降、Redis は 4 つの文字列型キー: GETRANGE/SETRANGE/GETBIT/SETBIT /Value コマンドを提供します。これらのコマンドを通じて、配列を操作するのと同じように String 型の値のデータにアクセスできます。

たとえば、ユーザーを一意に識別する ID は、String 値の単なる部分文字列である可能性があります。このように、GETRANGE/SETRANGE コマンドを通じて簡単に抽出できます。

さらに、BITMAP を使用してユーザーの性別情報 (男性は 1、女性は 0 など) を表すことができます。この方法を使用して 1 億人のユーザーの性別情報を表現する場合、必要なストレージ容量は 12MB だけであり、同時に SETBIT/GETBIT コマンドによるデータ トラバースも非常に効率的です。

3. できるだけハッシュを使用する:

小さなハッシュ型データは比較的小さなスペースしか占有しないため、実際のアプリケーションでは可能な限りハッシュの使用を検討する必要があります。 . 名前、性別、電子メール、年齢、パスワードなどのフィールドを含むユーザー登録情報などのハッシュ タイプ。

もちろん、この情報はキーの形式で保存でき、ユーザーが入力した情報は文字列値の形式で保存されます。ただし、Redis はハッシュの形式で保存することを好み、上記の情報はフィールド/値の形式で表現されます。

ここで、Redis のストレージ メカニズムを学習することで、このステートメントをさらに証明していきます。特別なエンコード メカニズムについてはこのブログの冒頭で説明しましたが、ハッシュ タイプに関連する 2 つの構成パラメータ、hash-max-zipmap-entries と hash-max-zipmap-value があります。

彼らの行動範囲については、以前に説明したので、ここでは詳しく説明しません。ここで、ハッシュ値に格納されているフィールドの数が hash-max-zipmap-entries 未満であり、各要素の長さも hash-max-zipmap-value 未満であると仮定します。このようにして、新しいハッシュ タイプのキー/値ストレージが存在するたびに、Redis はハッシュ値用の固定長スペースを作成します。事前に割り当てられる最大バイト数は次のとおりです:

total_bytes = hash-max-zipmap-entries * hash-max-zipmap-value

この方法では、すべてのハッシュ値 フィールドの位置は予約されており、フィールド/値は配列のようにランダムにアクセスでき、それらの間のステップ間隔は hash-max-zipmap-value です。

ハッシュ値内のフィールドの数または新しい要素の長さが上記の 2 つのパラメーター値を超​​える場合にのみ、Redis はそれらをハッシュ テーブルの形式で再保存することを検討します。それ以外の場合は、常にそのまま残ります。効率的な保管とアクセス方法です。

それだけでなく、各キーには有効期限や LRU などの関連システム情報を保存する必要があるため、文字列型のキー/値と比較して、ハッシュ型ではキーの数が大幅に削減されます。(ほとんどの場合)キーはハッシュ フィールドの形式で表現および保存されるため、ストレージ スペースの使用効率がさらに最適化されます。

redis についてさらに詳しく知りたい場合は、redis データベース チュートリアル 列に注目してください。

以上がRedis メモリの最適化方法の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。