ホームページ > 記事 > PHPフレームワーク > Redis のコア データ型を理解する
tring
型はバイナリ セーフです。つまり、string
任意のデータを含めることができます。
Redis の通常の文字列は、独自のエンコード方式である raw エンコードを使用しており、このエンコード方式では、冗長領域を事前に動的に拡張して事前に割り当て、頻繁なメモリ割り当てのオーバーヘッドを軽減します。
文字列長が 1MB 未満の場合は必要な長さの 2 倍で割り当てられ、1MB を超える場合は 1MB ずつ容量を増やして事前割り当てされます。
Redis
の数値も文字列型として保存されますが、エンコード方法は通常の文字列とは異なります。数値は 整数エンコードを使用し、文字列の内容は次のとおりです。 整数値のバイナリ バイト シーケンス に直接設定します。
通常の文字列、シリアル化されたオブジェクト、カウンター、その他のシナリオを保存する場合、Redis 文字列型を使用できます。文字列データ型に対応する命令には、set、get、mset、incr、decr などが含まれます。
list
リストは、一連の文字列型を格納する 高速双方向リンク リストですWords 文字列値
従来のポップおよびプッシュ要素の場合、リストが直接追加またはポップされるため、パフォーマンスは非常に高く、時間計算量は O(1) です。ただし、ランダムな挿入、ランダムな削除、ランダムな範囲の取得では、リストをポーリングして位置を決定する必要があり、パフォーマンスが比較的低くなります。
リストを操作する場合、lpush、lpop、rpush、rpop、および lrange を使用して、通常のキューの入口と出口、および範囲取得の操作を実行できます。一部の特殊なシナリオでは、lset および linsert を使用して実行することもできますランダムな挿入操作。lrem を使用して指定された要素の削除操作を実行します。最後に、メッセージ リストを使用するときに、取得をブロックするために Blpop と Brpop を使用することもできます。これにより、リストに一時的に要素がなくなったときに、静かにメッセージ リストの取得を待つことができます。追加の継続的な問い合わせなしで新しい要素を挿入します。
set は、文字列型の順序付けされていないコレクションです。セット内の要素は一意です。つまり、セット内に重複する要素はありません。 Redis のコレクションは通常、辞書ハッシュ テーブルを通じて実装されるため、要素のハッシュ値に基づいて挿入、削除、クエリ要素を直接見つけることができ、時間計算量は O(1) です。
#Operation
sismember この命令は、キーに対応する要素がセット データ構造内に存在するかどうかを判断します。 If 存在する場合は 1 を返し、存在しない場合は 0 を返します。
sdiff 複数のセット コレクションの差分を実行する命令。
sinter 命令は複数のセットで交差を実行します;
sunion 命令は複数のセットで結合を実行します;
spop コマンドはランダムな要素をポップアップし、
srandmember コマンドは 1 つ以上のランダムな要素を返します。
友達リスト を保存し、あなたが注意を払っているかどうかを判断し、 を作成するために使用できます。友人の推薦。さらに、セットの一意性を利用して、サービスのソース ビジネスとソース IP に関する正確な統計を作成することもできます。
操作
命令: 順序付きセット内の要素を順番に取得します;
命令: 要素のスコア値を取得します。
命令: 次のように指定して、指定されたスコア範囲を返します。スコア要素;
命令を使用して、複数の順序付きセットを交差および結合し、新しい順序付きセットを新しい key に格納します。重複する要素がある場合は、重複した要素のスコアが追加され、新しいセット内の要素のスコア値として使用されます。
ビットマップは一連の連続した 2 進数です。最下層は実際には string
by に基づいてカプセル化され、保存されます。 bit コマンド操作を実行します。ビットマップ内の各ビットの位置がオフセットです。setbit および bitfield を使用して、ビットマップ内の各ビットを 0 または 1 に設定できます。また、bitcount を使用して、ビットマップ内で 1 に設定されたビットの数をカウントすることもできます。また、bitcount を使用して、ビットマップ内で 1 に設定されたビットの数をカウントします。Bitop を使用して、複数のビットマップに対して AND、OR、XOR などの演算を実行できます。
bitmap
ビットマップの特徴は、ビット単位の設定、加算、OR 演算などの演算が非常に効率的であり、ストレージ コストが非常に低いことです。オブジェクトのラベル属性を格納するために使用されます。1 つのビットでラベルを格納できます。ビットマップを使用して、過去 N 日間のユーザーのログイン ステータスを保存できます。毎日 1 ビットを使用し、ログイン時に 1 に設定します。
パーソナライズされたレコメンデーションは、ソーシャル アプリケーションでは非常に重要です。軍事、エンターテイメント、ビデオ、写真、テキストなど、ニュースやフィードに一連のタグを設定できます。ビットマップは、これらのタグを保存するために使用されます。対応するタグ ビットは 1 に設定されます。ユーザーについても同様の方法でユーザーの複数の属性を記録でき、タグに基づいて多次元の統計を簡単に実行できます。ビットマップの重要な命令には、setbit、getbit、bitcount、bitfield、bitop、bitpos などが含まれます。
使用状況
統計的なユーザー ログイン ステータス: 1 2 3 5 日以内のログイン
ビットマップ: 1 1 1 0 1
特定の位置ポイントを保存するときは、まず Geohash
アルゴリズムを使用して、その位置の 2 次元の経度および緯度を 1 次元にマッピングおよびエンコードします。 52 ビットの整数値。場所の名前と経度および緯度のエンコード スコアはキーと値のペアとして使用され、分類キーに対応するソート セットに格納されます。
特定の場所の点 A 付近の人々を計算する必要がある場合は、まず指定された場所 A を中心点として、距離を半径として使用して GEO ハッシュの 8 方位範囲を計算します。方位範囲内の人々を順番にポーリングし、これらの位置点と中心位置 A との間の距離が必要な距離範囲内にある限り、すべての位置点が目標位置点となります。範囲内のすべてのロケーション ポイントをポーリングした後、ロケーション ポイント A 付近のすべてのターゲットを取得するように順序を変更します。
geoadd を使用して、場所名 (人、車両、店舗名など) および対応する地理的位置情報を指定された場所分類キーに追加します。
geopos を使用して、特定の場所の場所を簡単にクエリします。名前 位置情報;
georadius を使用して、指定された位置に近く、指定された距離を超えないすべての要素を取得します。
Redis GEO 地理的位置、Geohash を使用して多数の 2 次元経度を変換しますと緯度を 1 次元の整数値に変換します。これにより、地理的位置のクエリ、距離の測定、および検索範囲が簡単になります。ただし、地理的点の数が多いため、1 つの地理分類キーの下に多数の要素が存在する可能性があるため、GEO を設計する際には、単一のキーが過度に拡張されないよう事前に計画する必要があります。
Redis の GEO 地理的位置データ構造には、場所の特定の位置のクエリ、現在地から目的地までの距離の確認、近くの人、レストラン、映画館などの確認など、多くのアプリケーション シナリオがあります。 GEO の地理的位置データ構造では、重要な命令には geoadd、geopos、geodist、georadius、georadiusbymember などが含まれます。
geodist を使用して、指定した 2 つの位置間の距離を取得します。
hyperLogLog
はカーディナリティ統計に使用されるデータ型で、統計に膨大な数の要素が入力された場合にのみ、非常に少ないメモリでも実行できます。 HyperLogLog はメタデータを保存しませんが、カウントされる要素の推定数のみを記録します。この推定数は標準偏差 0.81% の近似値です。ほとんどのビジネス シナリオでは、大規模なデータの場合、1% 未満の誤差は許容されます。
Redis の HyperLogLog をカウントする際、カウント数が大きくない場合は、疎行列ストレージが使用されます。カウント数が増加するにつれて、疎行列が占める領域は徐々に増加します。しきい値を超えると、密行列、密行列が占めるスペースは固定で、約 12KB バイトです。
hyperLoglog データ型を通じて、pfadd を使用してカーディナリティ統計に新しい要素を追加したり、pfcount を使用して hyperLogLog 構造に格納されているおおよそのカーディナリティ番号を取得したり、hypermerge を使用して複数の要素をマージしたりすることもできます。 hyperLogLogs は 1 つの hyperLogLog 構造体に組み込まれるため、結合された基数を簡単に取得できます。
hyperLogLog の特徴は、統計処理が独立した要素を記録しないこと、使用するメモリが非常に少ないこと、そして大量のデータをカウントするのに非常に適していることです。大規模および中規模のシステムでは、hyperLogLog データ型を使用して、日または月ごとのユニーク訪問者数をカウントしたり、多数のユーザーによって検索された独立した用語の数をカウントしたりできます。
関連する学習の推奨事項: Laravel
以上がRedis のコア データ型を理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。