質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.13%

redisやmemcashedといったセッションストアの使用シーンがわかりません。(RDBではダメなんでしょうか?)

受付中

回答 2

投稿

  • 評価
  • クリップ 3
  • VIEW 6,117

cDm_48

score 172

redisに興味をもち、最近、色々と調べております。

主な特徴は以下だと思います。
・データを全てメモリ上に持つ
・データ永続化
・一意のキーと、保存したい値のペアでデータを保存する(KVS)

このようなKVSが出てくる中で、
そこで従来のRDBとどのように共存させていけばいいのかわかりません。

メモリ上でデータを持てるからには、リアルタイム性のある処理などはredisがいいのかなと思ったりしますが、大規模の開発をしたことがないため、あまりピンときません。


どういった場面でredisなどのKVSが活躍されるのでしょうか?(質問1)


調べてわかったのは
・リアルタイムのランキング機能表示
でした。

他の用途ももしご存知でしたら列挙で構いませんのでお願い致します。


また、redisで保存しているデータをRDBに保存するという使い方をされるのでしょうか?(質問2)

あくまでredisで用いるデータというのは一時的にしか使わず、一定期間後には削除するのを前提に格納されているのでしょうか?


以上、宜しくお願いします。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+4

Redisだけについて解答します。

>質問1
私が使ったことある用法は主に「高速化のためにキャッシュする」です。別な言い方をすると、Redis上のデータを失ってもさして問題ない使い方です。もうひとつは「冗長性もちゃんと確保して恒久的なKVSとして使う」ですが、これはやったことがないので他の回答に譲ります。例えば初期のLINEはRedisをキャッシュではなく恒久的なKVSとして使っていたようです。
HBase at LINEの9ページあたり参照)

質問者さんがセッションストアと言っているように、セッション情報を格納するケースはよくあると思います。RDBと違い、Redisはキーに期限を設定できるので、期限つきのセッション情報(≒クッキー)を格納し、キーがまだ存在すれば期限内ですし、無ければ期限切れなので再ログインを要求する、といった感じでしょう。仮にセッション情報全部を失っても、ユーザーに再ログインを要求するだけです。これをRDBだけでやるとクエリして期限を取得して、現在時刻と比較して・・あるいはWHEREで < (Less Than演算子)とか使うんでしょうか、とにかくRedisに比べるとほんのちょっと面倒です。

>質問2
キャッシュ用途ではRedisに格納されるデータと同じものをRDBに保存する必要はありません。
別に保存してもいいです、何をキャッシュするかによります。
例えばあるユーザー向けにテンプレートレンダリングしたコンテンツ(HTML)を、
Redisにキャッシュしてもいいと思いますが、RDBにも保存するのはちょっと違うかな、と思います。

あくまでredisで用いるデータというのは一時的にしか使わず、一定期間後には削除するのを前提に格納されているのでしょうか? 
キャッシュ用途ではそうです。一時的と言うと人間的には短い時間間隔という印象がありますが、例えば1年間有効なセッションなら31536000秒のEXPIREを設定することになります。一時的の意味するところは瞬間的ということでなくて、不要になったら(例えば期限が過ぎたら)削除するということです。

個人的に思うRedisのメリットはオンメモリによる、あるいはO(1)でアクセスできるというスピード、それとEXPIREによる生存期間の設定です。最近のPCやVPSはみんな性能が良いので、個人的に作る規模のものはキャッシュせずとも不満の無いスピードが出てしまいます。もしRDBだけでもスピードに不満がなければ、無理にRedisを使う必要はないと思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/06/15 22:45

    LINEの事例をと共に詳しく解説して頂き有難う御座います。
    これらをもとに再度勉強していこうとおもいます。

    また、想像で構いませんので、LINEでRedisがどのように使われていたのかを教えて頂けないでしょうか?

    sharowさんがLINEの中の人ではないかと思いますので、
    そんなこと知らないって言われそうですが、まだ、私の中で、実務でどのようにRedisが使われているのかが理解しきれておりません。

    LINEというからには「user_id」と「message」(チャットの履歴)という形でKVSを構築されていたのでしょうか?

    キャンセル

0

はい、私はLINEの中の人ではありませんし、そもそもLINEを使ったことすらありません。
なのでLINEがメッセージングアプリの類だと知ってるだけで、どういうものなのか分からないので
想像するための土台すら持ち合わせていない始末です。

それはともかく、以下の公式ドキュメントは参考になると思います(既にご覧になっているかもしれませんが…)。
ケーススタディ — redis 2.0.3 documentation

実務という話になると、LINEのプレゼンでもあるようにスケーラビリティや
冗長性・保守性云々という話に寄ってくるので、KVSとしてどう使うかという話以外になってくると思います。

--追記
コメントに返答したつもりだったのに新規回答になってた! すいません!

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/06/16 02:33

    再度ご回答有難う御座います。
    公式ドキュメントはどうしても取っ付きにくくてさけていました(私だけかもしれませんが)が、これを機に再読してみます。

    確かにまとまっていていいですね。

    感謝申し上げます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.13%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる