1
/
5

セッション管理としてRedisを使用する

はじめに

みなさん こんにちは、Thuatと申します。 この記事ではセッション管理としてRedisを使用するケースを紹介します。

Redisとは?

Redis は簡単に言うと、メモリ上のKey-Valueストアです。 メモリ上にデータを格納しますので高速に動作します。
以下はインストールから簡単なデータの登録・取得までの手順になります。

Redisをインストールする

Redisサーバーを起動する

Redisのポートはデフォルトで6379になります。

クライアントからGET/SETする

Redisにあらかじめ組込まれているクライアントツールからデータをGET/SETしてみましょう。
シンタックスは以下になります。
set key value
get key

ValueJSONでも保存できます。

Redisは メモリ上にデータを格納しますので、デフォルトはサーバーを停止、再起動した場合は、データが失われます。 Redisはどのような時に利用すればよいでしょうか。 最適なユースケースはキャッシュやセッション管理です。

セッション管理としてRedisを使用する

セッションとは?

セッションはクライアントとサーバの通信の状態をWebサーバー上に保持されます。クライアントはセッションIDをURLやクッキー経由でサーバに渡します。 Key-Value構造としてメモリ、ファイル又はDBに格納します。KeyはセッションID、Valueはセッションに保存したいデータです。
デフォルトではセッションは Webサーバーのメモリ上に保持されます。 Webサーバー単独でセッション管理を行う場合はWebサーバーのロードバランサを構成できません。 セッションをDBに格納する設定にすると、ロードバランサを構成することができますが、パフォーマンスに影響します。
セッションについては、
セッション管理の周辺知識まとめ – PAYFORWARD
を参照ください。

Redisを使ってセッションを管理する

データをセッションではなくて Redisで管理する方法を紹介します。
Redisにはセッションのようにタイムアウト時間を設定できます。タイムアウト時間を超えた場合はRedisに保存したデータが自動的に削除されます。

以下の機能をJavaで実現してみます。

JavaでのRedisクライアントは多くありますが一番人気はJedisです。
https://github.com/xetorthio/jedis/wiki/Getting-started

プロジェクトのLibrariesにjedis-2.9.0.jarを追加してください。
http://search.maven.org/remotecontent?filepath=redis/clients/jedis/2.9.0/jedis-2.9.0.jar

jedis-2.9.0.jar を追加する

フォルダの構成は以下のようになります

Userクラスを作成します。

UserActionクラスを作成します。 ユーザーのデータをRedisに保存するためのクラスです。
3分後、自動にExpireされるように設定します。
KeyはユニークなUUID、ValueJSONでのユーザーのデータです。


Eclipseで実行してみましょう。

a62a05d0-1efe-4d09-99f1-4289ff1511a6 は生成されたKey、ユニークなUUIDです。

セッション管理としてRedisを使用するメリットは以下になります。

  • メモリ上に格納するのでパフォーマンスがよい
  • Webサーバーの負荷が減る
  • 別サーバーでセッション管理するので、Webサーバーのロードバランサを問題なく構成することができる
    ロードバランサを構成するには以下のような構成となります。


最後に

セッション管理としてRedisを使用する方法やJavaでRedisにアクセスする方法を紹介しました。 Redisはまだたくさんオプションがあります。
例えば接続数ハンドル、トランザクションクラスターなどをもっと知りたい方は https://github.com/xetorthio/jedis/wiki を参照ください。

株式会社ラクスでは一緒に働く仲間を募集しています
1 いいね!
1 いいね!

同じタグの記事

今週のランキング