ホームページ  >  記事  >  データベース  >  Redis でリストを使用する場合

Redis でリストを使用する場合

藏色散人
藏色散人オリジナル
2019-06-11 09:50:014209ブラウズ

Redis リスト (リスト) は、挿入順に並べ替えられた単純な文字列のリストです。リストの先頭 (左) または末尾 (右) に要素を追加でき、リストには最大 232 - 1 個の要素 (4294967295、リストあたり 40 億以上の要素) を含めることができます。 (推奨: 「redis ビデオ チュートリアル 」)

Redis でリストを使用する場合

##list

一般的なコマンド:

lpush、rpush、lpop、rpop、lrange、BLPOP (ブロックされたバージョン) など。

アプリケーション シナリオ:

Redis リストには多くのアプリケーション シナリオがあり、Redis の最も重要なデータ構造の 1 つでもあります。

最新ニュースのランキングなどの機能を簡単に実装できます。

Lists のもう 1 つのアプリケーションはメッセージ キューです。Lists の PUSH 操作を使用してタスクを Lists に保存し、ワーカー スレッドが POP 操作を使用して実行するタスクを取り出します。

実装方法:

Redis リストの実装は二重リンクリストであり、逆方向検索とトラバーサルをサポートでき、より便利です。ただし、追加のメモリ オーバーヘッドが発生するため、送信バッファ キューなどを含む Redis 内の多くの実装でもこのデータ構造が使用されます。

RPOPLPUSH ソースの宛先

コマンド RPOPLPUSH は、原子時間内に次の 2 つのアクションを実行します。

ソースのリスト 最後の要素内の要素 (末尾要素) がポップアウトされ、クライアントに返されます。

ソースによってポップされた要素を、宛先リストの先頭要素としてリスト宛先に挿入します。

ソースとデスティネーションが同じ場合、リストの末尾の要素を先頭に移動して要素を返します。この特殊なケースは、リストの回転操作とみなすことができます。

典型的な例はサーバー監視プログラムです。アクセシビリティを確保するために、可能な限り短い時間で Web サイトのグループを並行してチェックする必要があります。

    redis.lpush "downstream_ips", "192.168.0.10"  
    redis.lpush "downstream_ips", "192.168.0.11"  
    redis.lpush "downstream_ips", "192.168.0.12"  
    redis.lpush "downstream_ips", "192.168.0.13"  
    Then:  
    next_ip = redis.rpoplpush "downstream_ips", "downstream_ips"

BLPOP

ジョブ、コマンド、リクエストの 3 つのリストがあるとします。ジョブは存在せず、コマンドとリクエストは両方とも保持されます。空ではないリスト。次のコマンドを考えてみましょう:

BLPOP ジョブ コマンド リクエスト 30 #30 秒間ブロックします。0 の場合、無期限にブロックされます。ジョブ リストは空なのでスキップされます。コマンド リストの最初の要素は次のようになります。飛び出し。

1)「コマンド」主に避けるため投票。簡単な例として、リストを使用してワークキューを実装するとします。タスクを実行するスレッドは、pop のブロッキング バージョンを呼び出してタスクを取得できるため、タスクが存在するかどうかを確認するためのポーリングを回避できます。ワーカー スレッドはタスクが来たときにすぐに戻ることができ、ポーリングによる遅延も回避できます。

以上がRedis でリストを使用する場合の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。