Redisは何ができるの?11種類のWebアプリケーションシーンを詳しく見る

3786 ワード

以下に11種類のWebアプリケーションシーンを示すが,これらのシーンではRedisの特性を十分に利用でき,効率を大幅に向上させることができる.
1.ホームページに最新のアイテムリストを表示します.
Redisは常駐メモリのキャッシュを使用しており,非常に高速である.LPUSHは、リストヘッダにキーワードとして格納されたコンテンツIDを挿入するために使用される.LTRIMは、リスト内のアイテム数を最大5000に制限します.ユーザが取得するデータ量がこのキャッシュ容量を超える場合、要求をデータベースに送信する必要があります.
2.削除およびフィルタ処理.
記事が削除された場合は、LREMを使用してキャッシュから完全に消去できます. 
3.ランキングおよび関連問題.
ランキング(leader board)は得点別にソートされます.ZADDコマンドはこの機能を直接実現することができ、ZREVRANGEコマンドはスコアに基づいて上位100名のユーザーを取得するために使用することができ、ZRANKはユーザーランキングを取得するために使用することができ、非常に直接的で操作が容易である.
4.ユーザー投票と時間順に並べ替えます.
これはRedditのランキングのようなもので、得点は時間とともに変化します.LPUSHとLTRIMコマンドを組み合わせて運用し,文章をリストに追加する.バックグラウンドタスクは、リストを取得し、リストのソートを再計算するために使用され、ZADDコマンドは、新しい順序でリストを埋め込むために使用されます.リストは、負荷の重いサイトでも、非常に迅速な検索を実現します.
5.期限切れのプロジェクト処理.
unix時間をキーワードとして使用して、リストを時間的にソートできるようにします.current_timeとtime_to_Liveは検索を行い、期限切れのプロジェクトを検索する困難な任務を完了した.もう1つのバックグラウンドタスクはZRANGEを使用します...WITHSCORESはクエリーを行い、期限切れのエントリを削除します.
6.カウント.
IPアドレスをいつ封鎖するかなど、さまざまなデータ統計を行う用途は非常に広い.INCRBYコマンドはこれらを容易にし、原子の増加によってカウントを維持します.GETSETはカウンタをリセットするために使用されます.期限切れ属性は、キーワードがいつ削除されるかを確認するために使用されます.
7.特定時間内の特定項目.
これは特定の訪問者の問題であり、ページ閲覧ごとにSADDコマンドを使用することで解決できます.SADDは既存のメンバーを1つのセットに追加しません.
8.発生している状況をリアルタイムで分析し、データ統計や迷惑メール防止などに用いる.
Redis原語コマンドを使用すると、スパムフィルタリングシステムや他のリアルタイム追跡システムを容易に実装できます.
9.Pub/Sub.
更新中にデータに対するユーザーのマッピングを維持することは、システムの一般的なタスクです.Redisのpub/sub機能は、SUBSCRIBE、UNSUBSCRIBE、PUBLISHコマンドを使用しており、これをより容易にしています. 
10.キュー.
現在のプログラミングでは、キューが随所に表示されます.Pushとpopタイプのコマンドに加えて、Redisにはキューをブロックするコマンドがあり、実行時に別のプログラムによってプログラムをキューに追加することができます.回転更新されたRSS feedキューなど、もっと面白いことをすることもできます.
11.キャッシュ.
Redisキャッシュの使用方法はmemcacheと同じです.
ネットワークアプリケーションはモデルの戦争を絶えず行うことはできない.これらのRedisの原語命令を見てみると、簡単だが機能が強く、それらを組み合わせて、完成できることは想像できない.もちろん、これらの操作をすべて完了するためにコードを書くことができますが、Redisは明らかに簡単です.
間違いなく、Redisは新しいデータストレージの構想を切り開いて、Redisを使って、私たちは機能の単調なデータベースに直面する時、どのように象を冷蔵庫に入れるかという問題に精力を置くのではなく、Redisの柔軟で変化の多いデータ構造とデータ操作を利用して、異なる象のために異なる冷蔵庫を構築します.この比喩が好きになってほしい.
以下は、Redisの作者@antirezで、Redisに適したアプリケーションシーンを説明しています.NoSQLFanは簡単にここに挙げられています.一覧です.

1.最新のN個のデータを取る操作


例えば、あなたのサイトの最新の文章を取って、以下の方法で、最新の5000件のコメントのIDをRedisのリストセットに置いて、セットを超えた部分をデータベースから取得することができます.
  • LPUSH latestを使用する.commentsコマンド、listセットにデータ
  • を挿入
  • 挿入完了後にLTRIM latestを使用する.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のscoreに設定し、具体的なデータを対応するvalueに設定し、毎回ZADDコマンドを実行するだけでいいです.

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


    例えば、上記のsorted setのscore値を期限切れのタイムスタンプに設定すると、期限切れのソートを簡単に行い、期限切れのデータをタイミング的に消去することができます.Redisの期限切れのデータを消去するだけでなく、Redisの期限切れの間をデータベースのデータに対するインデックスと見なし、Redisで期限切れの削除が必要なデータを見つけることができます.次に、データベースから適切なレコードを正確に削除します.

    4.カウンタ応用


    Redisのコマンドはすべて原子的で、INCR、DECRコマンドを簡単に利用してカウンタシステムを構築することができます.

    5.Uniq操作、一定期間のすべてのデータの重量値を取得する


    このRedisを使用したsetデータ構造が最適で、setにデータをどんどん投げ込むだけでいいです.setは集合を意味するので、自動的に重さが排出されます.

    6.リアルタイムシステム、反ゴミシステム


    上述したset機能により、端末ユーザが操作を行ったかどうか、その操作の集合を見つけて分析統計比較などを行うことができる.できないことはないが、思いもよらなかった.

    7.Pub/subリアルタイムメッセージシステムの構築


    RedisのPub/subシステムは、Pub/subで構築された多くのリアルタイムチャットシステムの例のようなリアルタイムのメッセージシステムを構築することができる.

    8.キューシステムの構築


    リストを使用してキューシステムを構築したり、sorted setを使用して優先度のあるキューシステムを構築したりすることができます.