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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

memcached

memcached は、汎用の分散型メモリキャッシュサーバです。

Q&A

2回答

8823閲覧

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

kento2543

総合スコア163

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

memcached

memcached は、汎用の分散型メモリキャッシュサーバです。

0グッド

3クリップ

投稿2015/06/14 16:38

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

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

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

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

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

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

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

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

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

以上、宜しくお願いします。

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

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/14 23:07

編集2015/06/14 23:12
sharow

総合スコア1149

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kento2543

2015/06/15 13:45

LINEの事例をと共に詳しく解説して頂き有難う御座います。 これらをもとに再度勉強していこうとおもいます。 また、想像で構いませんので、LINEでRedisがどのように使われていたのかを教えて頂けないでしょうか? sharowさんがLINEの中の人ではないかと思いますので、 そんなこと知らないって言われそうですが、まだ、私の中で、実務でどのようにRedisが使われているのかが理解しきれておりません。 LINEというからには「user_id」と「message」(チャットの履歴)という形でKVSを構築されていたのでしょうか?
guest

0

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

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

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

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

投稿2015/06/15 15:57

編集2015/06/15 15:58
sharow

総合スコア1149

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kento2543

2015/06/15 17:33

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問