ホームページ  >  記事  >  PHPフレームワーク  >  Redis のコア データ型を理解する

Redis のコア データ型を理解する

coldplay.xixi
coldplay.xixi転載
2020-07-03 17:20:102732ブラウズ

Redis のコア データ型を理解する

string 文字列

tring 型はバイナリ セーフです。つまり、string 任意のデータを含めることができます。

Redis の通常の文字列は、独自のエンコード方式である raw エンコードを使用しており、このエンコード方式では、冗長領域を事前に動的に拡張して事前に割り当て、頻繁なメモリ割り当てのオーバーヘッドを軽減します。

文字列長が 1MB 未満の場合は必要な長さの 2 倍で割り当てられ、1MB を超える場合は 1MB ずつ容量を増やして事前割り当てされます。

Redis の数値も文字列型として保存されますが、エンコード方法は通常の文字列とは異なります。数値は 整数エンコードを使用し、文字列の内容は次のとおりです。 整数値のバイナリ バイト シーケンス に直接設定します。

通常の文字列、シリアル化されたオブジェクト、カウンター、その他のシナリオを保存する場合、Redis 文字列型を使用できます。文字列データ型に対応する命令には、set、get、mset、incr、decr などが含まれます。

list list

list リストは、一連の文字列型を格納する 高速双方向リンク リストですWords 文字列値

従来のポップおよびプッシュ要素の場合、リストが直接追加またはポップされるため、パフォーマンスは非常に高く、時間計算量は O(1) です。ただし、ランダムな挿入、ランダムな削除、ランダムな範囲の取得では、リストをポーリングして位置を決定する必要があり、パフォーマンスが比較的低くなります。

リストを操作する場合、lpush、lpop、rpush、rpop、および lrange を使用して、通常のキューの入口と出口、および範囲取得の操作を実行できます。一部の特殊なシナリオでは、lset および linsert を使用して実行することもできますランダムな挿入操作。lrem を使用して指定された要素の削除操作を実行します。最後に、メッセージ リストを使用するときに、取得をブロックするために Blpop と Brpop を使用することもできます。これにより、リストに一時的に要素がなくなったときに、静かにメッセージ リストの取得を待つことができます。追加の継続的な問い合わせなしで新しい要素を挿入します。

set セット

set は、文字列型の順序付けされていないコレクションです。セット内の要素は一意です。つまり、セット内に重複する要素はありません。 Redis のコレクションは通常、辞書ハッシュ テーブルを通じて実装されるため、要素のハッシュ値に基づいて挿入、削除、クエリ要素を直接見つけることができ、時間計算量は O(1) です。

#Operation

  • sismember この命令は、キーに対応する要素がセット データ構造内に存在するかどうかを判断します。 If 存在する場合は 1 を返し、存在しない場合は 0 を返します。

  • sdiff 複数のセット コレクションの差分を実行する命令。

  • sinter 命令は複数のセットで交差を実行します;

  • sunion 命令は複数のセットで結合を実行します;

  • spop コマンドはランダムな要素をポップアップし、

  • srandmember コマンドは 1 つ以上のランダムな要素を返します。

ソーシャル システムでは、あなたがフォローしている

友達リスト を保存し、あなたが注意を払っているかどうかを判断し、 を作成するために使用できます。友人の推薦。さらに、セットの一意性を利用して、サービスのソース ビジネスとソース IP に関する正確な統計を作成することもできます。

ソートセット順序付きセット

順序付きセットでは、各要素は double 型のスコア値に関連付けられます。ソートされたセットは、このスコア値によって小さいものから大きいものへとソートされます。順序付きセットでは、要素の繰り返しは許可されませんが、スコア値の繰り返しは許可されます。

操作

  • ##zscan

    命令: 順序付きセット内の要素を順番に取得します;

  • zscore

    命令: 要素のスコア値を取得します。

  • zrange

    命令: 次のように指定して、指定されたスコア範囲を返します。スコア要素;

  • 要素のスコア値が変更された場合、zincrby 命令を使用して要素のスコア値を加算または減算することもできます。
  • zinterstore、zunionstore

    命令を使用して、複数の順序付きセットを交差および結合し、新しい順序付きセットを新しい key に格納します。重複する要素がある場合は、重複した要素のスコアが追加され、新しいセット内の要素のスコア値として使用されます。

  • 順序付きコレクションを使用して、ランキングをカウントし、リアルタイムでランキングを更新できます。また、学生のスコアを記録するためにも使用できるため、特定のスコア範囲内の学生のリストを簡単に取得できますシステム統計に重みを追加して、ダッシュボードにリアルタイムで表示することもできます。

ハッシュハッシュわずかに

bitmap

ビットマップは一連の連続した 2 進数です。最下層は実際には string

by に基づいてカプセル化され、保存されます。 bit コマンド操作を実行します。ビットマップ内の各ビットの位置がオフセットです。setbit および bitfield を使用して、ビットマップ内の各ビットを 0 または 1 に設定できます。また、bitcount を使用して、ビットマップ内で 1 に設定されたビットの数をカウントすることもできます。また、bitcount を使用して、ビットマップ内で 1 に設定されたビットの数をカウントします。Bitop を使用して、複数のビットマップに対して AND、OR、XOR などの演算を実行できます。

Redis 笔记

bitmap ビットマップの特徴は、ビット単位の設定、加算、OR 演算などの演算が非常に効率的であり、ストレージ コストが非常に低いことです。オブジェクトのラベル属性を格納するために使用されます。1 つのビットでラベルを格納できます。ビットマップを使用して、過去 N 日間のユーザーのログイン ステータスを保存できます。毎日 1 ビットを使用し、ログイン時に 1 に設定します。

パーソナライズされたレコメンデーションは、ソーシャル アプリケーションでは非常に重要です。軍事、エンターテイメント、ビデオ、写真、テキストなど、ニュースやフィードに一連のタグを設定できます。ビットマップは、これらのタグを保存するために使用されます。対応するタグ ビットは 1 に設定されます。ユーザーについても同様の方法でユーザーの複数の属性を記録でき、タグに基づいて多次元の統計を簡単に実行できます。ビットマップの重要な命令には、setbit、getbit、bitcount、bitfield、bitop、bitpos などが含まれます。

使用状況

統計的なユーザー ログイン ステータス: 1 2 3 5 日以内のログイン
ビットマップ: 1 1 1 0 1

GEO 地理的位置

特定の位置ポイントを保存するときは、まず 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 はカーディナリティ統計に使用されるデータ型で、統計に膨大な数の要素が入力された場合にのみ、非常に少ないメモリでも実行できます。 HyperLogLog はメタデータを保存しませんが、カウントされる要素の推定数のみを記録します。この推定数は標準偏差 0.81% の近似値です。ほとんどのビジネス シナリオでは、大規模なデータの場合、1% 未満の誤差は許容されます。

Redis の HyperLogLog をカウントする際、カウント数が大きくない場合は、疎行列ストレージが使用されます。カウント数が増加するにつれて、疎行列が占める領域は徐々に増加します。しきい値を超えると、密行列、密行列が占めるスペースは固定で、約 12KB バイトです。

hyperLoglog データ型を通じて、pfadd を使用してカーディナリティ統計に新しい要素を追加したり、pfcount を使用して hyperLogLog 構造に格納されているおおよそのカーディナリティ番号を取得したり、hypermerge を使用して複数の要素をマージしたりすることもできます。 hyperLogLogs は 1 つの hyperLogLog 構造体に組み込まれるため、結合された基数を簡単に取得できます。

hyperLogLog の特徴は、統計処理が独立した要素を記録しないこと、使用するメモリが非常に少ないこと、そして大量のデータをカウントするのに非常に適していることです。大規模および中規模のシステムでは、hyperLogLog データ型を使用して、日または月ごとのユニーク訪問者数をカウントしたり、多数のユーザーによって検索された独立した用語の数をカウントしたりできます。

関連する学習の推奨事項: Laravel

以上がRedis のコア データ型を理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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