AMG Solution

Spring Session + Redis(AWS ElastiCache)でセッション管理を行う方法【導入編】

こんにちは、堀部です。

Springフレームワークを使ったWebアプリケーションで、Spring SessionとRedisを使ったセッション管理を行うことになりました。

実装方法を調べてみていろいろと試行錯誤した結果、実現はできたものの、とんでもなくドはまりしたので実装方法を書いておきたいと思います。

本番環境のRedisはAWSのElastiCacheを使っていますが、今回はひとまずローカル環境にインストールしたRedisに接続する方法をご紹介します。

ちなみにこの方法でCODEMATIC Java版にも導入可能であることを確認済みです。

Redisってそもそも何? 使うメリットは?

簡単に言うとNoSQLのインメモリDBです。

ロードバランサ―等で複数台のアプリケーションサーバを稼働させるとセッションの共有はできませんが、Redisでセッションを外部管理すると1台がフェールオーバーしてもセッションを維持することができます。

また、システム稼働中でもユーザのログアウトを待つことなく、アプリケーションのデプロイが行えたりもします。

以下のサイトに詳しい解説がありますので、読んでみてください。

Redisをインストールする

RedisはWindows環境をサポートしていないので、Windows環境にRedisをインストールする場合はMSOpenTechを利用してください。

下記サイトから、msiをダウンロードしてインストールします。
https://github.com/MicrosoftArchive/redis/releases

インストールが完了したら、コマンドプロンプトから以下のコマンドを実行します。正しく表示されればインストール完了です。

対象バージョン

今回使用したバージョンは以下の通りです。

Java 1.8
Spring Framework 4.2.1
jedis 2.9.0
Redis 3.2.6

Spring Sessionを導入する

Spring Sessionを導入するために設定変更を行います。RedisのJavaクライアントライブラリはJedisを使います。

pom.xml

spring-data-commonsはバージョンによっては以下のエラーが出るため、明示的に指定しています。バージョンの組み合わせによっては追加は不要になるかもしれません。

web.xml

applicationContext.xml

最後にセッションに持たせるJavaオブジェクトは、対象のクラスにSerializableを付けておきます。

これで設定は完了です。対象のアプリケーションを動かした後に、redis-cliの「keys *」を実行しセッション情報が格納されていれば成功です。

まとめ

いかがでしたでしょうか? 一見簡単そうに見える導入ですが、いざやってみると結構ハマりました。

基本的な設定はこれで完了しましたが、本番環境のRedisはSSL接続が必要だったり、クラスタ構成で冗長化されていたりと、何かと追加の設定が必要になります。そのような場合の設定方法についても、後日ご紹介したいと思います。

HORIBE'S BLOG

堀部光一の記事

堀部光一の記事の最新情報をお届けいたします。

SAME CATEGORY BLOG

この記事と同様のカテゴリー記事

マイナビ2019 採用エントリーはじめました。
LOADING