ホームページ >バックエンド開発 >PHPチュートリアル >11 の Web アプリケーション シナリオで Redis をフル活用

11 の Web アプリケーション シナリオで Redis をフル活用

黄舟
黄舟オリジナル
2017-10-25 09:20:201701ブラウズ

以下は 11 の Web アプリケーション シナリオのリストです。これらのシナリオでは、Redis の機能を最大限に活用し、効率を大幅に向上させることができます。

1.最新のプロジェクトリストをホームページに表示します。

Redis は非常に高速な常駐メモリ キャッシュを使用します。 LPUSH は、リストの先頭にキーとして格納されるコンテンツ ID を挿入するために使用されます。 LTRIM は、リスト内の項目数を最大 5000 に制限するために使用されます。ユーザーが取得する必要があるデータの量がこのキャッシュ容量を超える場合は、リクエストをデータベースに送信する必要があります。

2.削除してフィルタリングします。

記事が削除された場合は、LREM を使用してキャッシュから記事を完全にクリアできます。

3.ランキングと関連問題。

リーダーボードはスコアによって並べ替えられます。 ZADD コマンドはこの機能を直接実装でき、ZREVRANGE コマンドはスコアに応じて上位 100 人のユーザーを取得するために使用でき、ZRANK は非常に直接的で操作が簡単です。

4.ユーザーの投票数と時間順に並べ替えられます。

これは Reddit のリーダーボードのようなもので、スコアは時間の経過とともに変化します。 LPUSH および LTRIM コマンドを一緒に使用して、記事をリストに追加します。バックグラウンド タスクを使用してリストを取得し、リストの順序を再計算します。ZADD コマンドを使用して、生成されたリストを新しい順序で設定します。リストを使用すると、負荷の高いサイトであっても非常に高速に取得できます。

5.期限切れ商品の処理。

UNIX 時間をキーとして使用して、リストを時間順に並べ替えます。 current_time と time_to_live を取得して、期限切れのアイテムを見つけるという難しいタスクを完了します。別のバックグラウンド タスクは、ZRANGE...WITHSCORES を使用して、期限切れのエントリをクエリし、削除します。

6.カウント。

IP アドレスがいつブロックされたかを知りたいなど、さまざまなデータ統計の用途は非常に多岐にわたります。 INCRBY コマンドを使用すると、アトミック インクリメントによってカウントを維持できるため、これが簡単になります。GETSET を使用してカウンタをリセットし、expiration 属性を使用してキーワードを削除するタイミングを確認します。

7.特定の期間内の特定のプロジェクト。

これは訪問者固有の問題であり、ページビューごとに SADD コマンドを使用することで解決できます。 SADD は、既存のメンバーをコレクションに追加しません。

8.何が起こっているかをリアルタイムに分析し、データ統計やスパム防止などに使用されます。

Redis の基本コマンドを使用すると、スパム フィルタリング システムやその他のリアルタイム追跡システムを簡単に実装できます。

9.パブリッシュ/サブスクライブ。

更新後もデータのユーザー マッピングを維持することは、システムの一般的なタスクです。 Redis のパブリッシュ/サブスクライブ機能を使用すると、SUBSCRIBE、UNSUBSCRIBE、および PUBLISH コマンドを使用してこれを簡単に行うことができます。

10.列。

キューは現在のプログラミングのいたるところで見られます。 Redis には、プッシュおよびポップ タイプのコマンドに加えて、実行中に別のプログラムによってプログラムをキューに追加できるブロッキング キュー コマンドもあります。更新された RSS フィードのローテーション キューなど、もっと興味深いことを行うこともできます。

11.キャッシュ。

Redis キャッシュは memcache と同じように使用されます。

ネットワーク アプリケーションは、終わりのないモデル戦争を行うことはできません。これらの Redis の基本的なコマンドはシンプルですが強力ですが、これらを組み合わせることで何が実現できるかはさらに想像を絶します。もちろん、これらの操作をすべて実行するための特殊なコードを作成することもできますが、明らかに Redis の方が実装が簡単です。

Redis が新しいデータ ストレージの方法を生み出したことは疑いの余地がありません。Redis を使用すると、単調な関数を備えたデータベースに直面したときに、どうやって冷蔵庫に入れるかという問題に焦点を当てる必要がなくなります。柔軟なデータ構造とデータ操作により、ゾウごとに異なる冷蔵庫を構築できます。この比喩が気に入っていただければ幸いです。

以下は、Redis の作者である @antirez によって書かれた新しい記事です。彼は、Redis がより適しているいくつかのアプリケーション シナリオを、誰もが概要を理解できるようにここにリストしています。最新の N Data 操作

たとえば、典型的な例は、Web サイトの最新の記事を取得することです。次のメソッドを通じて、最新の 5000 件のコメントの ID を Redis リスト コレクションに入れ、そこから余分な部分を取得できます。データベース

LPUSH 最新.commentseddfa97ffc1dc71769e3f42e462dfe8e コマンドを使用して、

リスト コレクションにデータを挿入します

  • 挿入が完了したら、LTRIM 最新.comments 0 5000 コマンドを使用して、常に最新のもののみを保存します5000 ID

  • その後、クライアントは特定のページのコメントを取得するときに次のロジック (疑似コード) を使用できます

  • FUNCTION get_latest_comments(start,num_items):
        id_list = redis.lrange("latest.comments",start,start+num_items-1)
        IF id_list.length < num_items
            id_list = SQL_DB("SELECT ... ORDER BY time LIMIT ...")
        END
        RETURN id_list
    END
  • 特定のカテゴリの最新 N 個のアイテムなど、異なるフィルタリングの次元がある場合は、このカテゴリに基づいて別のリストを作成できます。ID のみが保存されている場合、Redis は非常に効率的です。

    2.ランキングアプリケーション、TOP N 操作を取る

    この要件と上記の要件の違いは、前の操作では重みとして時間を使用するのに対し、この操作では数値による並べ替えなどの特定の条件を重みとして使用することです。現時点では、sorted set が必要です。ソートしたい値を、sorted set のスコアに設定し、特定のデータを対応する値に設定する必要があります。それぞれ 1 つの ZADD コマンドを実行するだけです。時間。

    3. 有効期限を正確に設定する必要があるアプリケーション

    たとえば、上記のソートセットのスコア値を有効期限のタイムスタンプに設定すると、単純に有効期限でソートし、 Redis の期限切れデータを定期的に消去するだけでなく、Redis の有効期限をデータベース内のデータのインデックスとみなして、Redis を使用して期限切れにする必要があるデータを見つけて正確に削除できます。データベースのレコードからの対応するデータ。

    4.カウンター アプリケーション

    Redis コマンドはすべてアトミックです。INCR および DECR コマンドを使用して簡単にカウンター システムを構築できます。

    5. 一定期間内の全データの重複排除値を取得するUniq操作

    これは、セットにデータを投げ続けるだけで済みます。 , そのため、自動的に重放電が行われます。

    6. リアルタイムシステム、スパム対策システム

    上記のset機能を通じて、エンドユーザーが特定の操作を実行したかどうかを知ることができ、その操作のセットを見つけて分析と統計を行うことができます比較。不可能なことは何もありません、ただ想像できないだけです。

    7.Pub/Sub はリアルタイム メッセージング システムを構築します

    Redis の Pub/Sub システムは、Pub/Sub で構築されたリアルタイム チャット システムの多くの例など、リアルタイム メッセージング システムを構築できます。

    8. キューシステムを構築する

    キューシステムを構築するにはリストを使用し、優先度のあるキューシステムを構築するにはソートセットを使用します。

以上が11 の Web アプリケーション シナリオで Redis をフル活用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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