Redis:30分入門から精通まで-2 P

4925 ワード

作者はすごいですね.私が知らない彼は全部知っています.
Redis: Zero to Master in 30 minutes - Part 2
Part 1ではRedisを紹介し,主に5つのデータ構造を集中的に紹介し,それらをどのように使用できるかを紹介した.この部分ではRedisを用いて簡単な応用を始めることができ,30分以内に精通していることを示した.(私はまだ何なのか分かりませんが、スペルRedisに精通していますが本当です)
始める前に、RedisのAPIは多くのものとは異なることに注意してください.通常のCRUD四天王ではなく、Redisには専用の方法がたくさんあります.これまで、私たちはほんの一部しか見ていませんでした.私たちのアプリケーションもほんの一部で、共通のシーンを使用します.あなたが死んでも使えない方法や、私が拭く方法があります.ドキュメントを調べてください.Redisに精通しているのは、あなたにすべての方法を暗記させるわけではありません(いいですね!でも私はまだ分かりません...).精通とは,(a)5要素を理解し,(b)データモデルをどのように照会するかを理解し,(c)aとbを結合してRedisの牛迫を証明することである.
では、私たちがしなければならないのはこのような例です.jobs.openmymind.net.その上の私たちの職場はどこから捕まえたのか、そして彼らを示しています.完全なコードはここにあります.まず、リレーショナル・データベースまたはドキュメント・データベースを使用すると、より直接的になることを認めます.
職場を保存する.
バックグラウンドスレッドは、さまざまなjsonおよびRSSサービスを実行および取得し、職場を取得するために使用されます.私たちの方法では、各ポジションの文字列値を処理します.Keyのフォーマットはjob:SOURCE:SOURCE_になりますID.例えばgithubに1をあげてhttp://jobs.github.com/positions/73c9e09a-09b0-11e1-9819-355783013ce0上の作業のkeyはjob:1:73 c 9 e 09 a-09 b 0-11 e 1-9819-355783013 ce 0になります.値はこのkeyに対応する作業の詳細です.
私たちの職場をhashとして解析し、Redisで保存すると、そう見えるはずです.
<!-- lang: js -->
def save(job)
  key = "job:#{job[:source]}:#{job[:source_id]}"
  redis.set(key, job.to_json)
end

ここで、私たちは単純に時間の逆順に職場を表示したいと思っています.私たちはページを分ける必要はありません.最新のXの職場を表示するだけです.もちろん、上記のコードでは完成できません.keysが必要です.日付順にソートします.Part 1で見たように、最初の試みは簡単にリストを使います.
<!-- lang: js -->
def save(job)
  key = "job:#{job[:source]}:#{job[:source_id]}"
  redis.multi do  #begins a transaction
    redis.set(key, job.to_json)
    redis.lpush('jobs', key)
  end
end

ええ、これは本当ではありません.私たちがRedisにポジションを挿入する時間は、このポジションがいつ作成されたのかをマッピングする必要はありません.この方法では、ポジションの作成時間ではなく、私たちが処理した時間に基づいてポジションをソートします.解決策は?リストの代わりにSorted setを使用します.
<!-- lang: js -->
def save(job)
  key = "job:#{job[:source]}:#{job[:source_id]}"
  redis.multi do
    redis.set(key, job.to_json)
    redis.zadd('jobs', job[:created_at], key) # :created_at is already an integer (seconds since ..)
  end
end

ええ、もし私たちが職場を保存したらどうしますか?事実は証明しているが,何の問題もない.私たちは私たちのポジション文字列(実際には変化したポジションの詳細)をリセットして、それから、私たちがこのSetを使うとき、KeyをSetに追加することができます.
うん、後でこれを続けましょう.総じて言えば、これはいい始まりです.
職場を列挙する.
私たちはすべての職場を保存するだけでなく、同じように私たちも職場のkeyを並べています.ここから職場の内容を手に入れるのは難しくありません.
<!-- lang: js -->
def get_latest_jobs
  keys = redis.zrevrange('jobs', 0, 150)
  jobs = redis.mget(*keys)
  jobs.map do |j|
    job = JSON.parse(j)
    job['created_at'] = Time.at(job['created_at'])
    job
  end
end

集合を小さい頃から大きい順に並べ替える.新しいデータほど重みが高くなるという意味です(1970から今日までのミリ秒数は1980までのミリ秒数より多い...).もし私たちの前の150のデータ(zrangeで)を使ったら、私たちは最も古い150の職場を手に入れます.私たちは最近の最新の150の職場を望んでいます.それらは私たちが高い重みを持っています.そこでzrevrange(逆取り)を使います.
私たちがsetから手に入れたのはkeyの配列です.私たちはmgetを使って実際のポジション値を取得します(逆シーケンス化します).ルビーが分からない場合は、mgetメソッドに使われている*号は実際に配列をパラメータに変えています(それはポインタ記号ではありませんか.これは住所を取るという意味でしょう.
ええ、そうです.
職場を整理する.
私たちは最新の150の職場を表示すれば、古いものを保存する必要はありません.メモリはお金ですね.私たちがしなければならないのは、それらの古い職場を集合から取り除き、keyを削除することです.どうやって作ったか見てみましょう
<!-- lang: js -->
redis.multi do
  keys = redis.zrange('jobs', 0, -300)
  redis.del(*keys)
  redis.zrem('jobs', *keys)
end

明らかに、ここでは0から-300までのデータをすべてクリーンアップします.私たちがここで使っているのはzrangeです.低重み優先(つまりさっき私たちが貯めた古い職場)という意味です.例えば、私たちは500のポストを持っています.私たちは1-200(つまり500-300)を削除します.150のポストしか表示されていないので、-150を使うことができます.しかし、不測の事態を防ぐためにバッファを維持します.
あるいは、EXPIREというkey-commandを使ってRedisに古い職場(例えば、10日前)を自動的に削除させることもできます.もちろん、私たちの集合を処理する必要があります.単独の記録を処理することはできません.覚えておいてください.私たちは大局観を持っていなければなりません.
Twitter Integration
Redisには素晴らしいパブリケーション購読APIがあります.また、ResqueがRedisのキューを構築するために使用されるなど、素晴らしいライブラリがあります.非常に基礎的な例を作ってみましょう.
私たちが新しい職場を持っているとき、私たちはkeyをlistに追加します.そのため、職場を保存するには、このように見えるはずです.
<!-- lang: js -->
def save(job)
  key = "job:#{job[:source]}:#{job[:source_id]}"
  if !redis.exists(key)
    redis.rpush('jobs:new', key)
  end
  redis.multi do
    redis.set(key, job.to_json)
    redis.zadd('jobs', job[:created_at], key)
  end
end

そして私たちは楽屋でこのようにpopすることができます.
<!-- lang: js -->
def get_new_job
  key = redis.lpop('jobs:new')
  key ? JSON.parse(redis.get(key)) : nil
end

うん、強くないけど、需要を実現した.
以上
あなたはまだRedisに精通しているとは思わないかもしれません.実際には、勉強しなければならないことがたくさんあります.今回の勉強を通じて、自分のRedisの旅を始めるのに十分な基礎があることを望んでいます.
Redisを装うにはいくつかの方法がある.多くのパッケージ管理で見つけることができます(brewなど)、ソースコードをダウンロードすることができます.Windowsユーザーはこの文章を通じて(私はこのようにしています).ダウンロードすると、redis-serverでサービスを開くことができます.その後redis-cliでクライアントを起動します.好きなプログラミング言語のクライアントをダウンロードすることができます.
あるいは、オンラインチュートリアルを試してみてください.
最後に、Redisモデルの議論に興味があれば、私のこの2つの文章に興味があるかもしれません.
  • Practical NoSQL - Solving a Real Problem with MongoDB and Redis
  • Rethink your Data Model

  • もっと複雑な実際の応用に興味があるなら、ここを見てください:LamerNews
    ★悪評!悪い評価!私は午後中も精通していませんでした.