セッション共有のためのRedis設定
前回はSQL Serverを使用してセッションの共有化を実現しましたが、今回はRedisを利用してセッションを共有する方法について説明します。前回の記事ではsessionStateノードのmode="SQLServer"を使用して複数アプリケーション間でセッションを共有しましたが、実はmode="Custom"という設定があり、これによりRedisなどの外部キャッシュストレージにセッション情報を保存することが可能です。
Redisサーバー側の設定
Redisサーバーの構築方法については過去の記事を参照してください。今回はRedisを1台だけ起動し、ポート6379で動作させています。
Webアプリケーションの設定
RedisProviderの導入
Visual StudioのNuGetパッケージマネージャーから「redissession」を検索し、「RedisSessionProvider」をインストールします。このパッケージはWebFormsおよびMVCプロジェクト双方で使用可能です。
web.configの設定
インストール後、web.configファイルに以下のセッション状態の設定を追加します:
<sessionState mode="Custom" customProvider="RedisSessionProvider">
<providers>
<add name="RedisSessionProvider"
type="RedisSessionProvider.RedisSessionStateStoreProvider, RedisSessionProvider"
host="127.0.0.1"
port="6379"
accessKey=""
ssl="false"/>
</providers>
</sessionState>
Global.asaxの設定
次に、Global.asaxファイルに以下のコードを追加し、Redisサーバーへの接続設定を行います:
using RedisSessionProvider.Config;
using StackExchange.Redis;
protected void Application_Start()
{
ConfigurationOptions redisConfigOpts = ConfigurationOptions.Parse("127.0.0.1:6379");
RedisSessionProvider.Config.RedisConnectionConfig.GetSERedisServerConfig = (HttpContextBase context) =>
{
return new KeyValuePair<string, ConfigurationOptions>(
"DefaultConnection",
redisConfigOpts);
};
}
Redisへのセッションデータの保存確認
Redisクライアントであるredis-cliを使用して、セッションデータが正しく保存されているかを確認できます。6379ポートで動作するRedisに接続し、セッションIDに対応するキーが存在するか確認してください。
デモの実行
WebFormsアプリケーションとMVCアプリケーションを順番に起動します。MVC側でViewBagを使ってセッション情報にアクセスできることが確認できます。
実運用における考慮点
今回の例はあくまで簡単なデモですが、実際のプロダクション環境では、以下のような構成が一般的です:
- Webサーバー間の負荷分散にNginxを利用
- Redisの高可用性を確保するためのマスタースレーブ構成
- Redisサーバー間の負荷分散にもNginxなどを導入
このような構成により、システムの水平スケーラビリティを容易に実現できます。