0. 前書き
前回「ASP.NETのセッション管理方法を整理する」で、ASP.NETのセッション管理方法についてまとめました。今回は、Custom定義のバリエーションとして、Azure Redis Cacheを用いたセッション管理方法について手順をまとめます。
バージョン情報
name | ver. |
---|---|
ASP.NET MVC | 4.5.2 |
Microsoft.Web.RedisSessionProvider | 2.0.1 |
1. Azure Redis Cacheとは
Redis Cacheとは、オープンソースのNoSQLです。ちょっと古い記事ですが、こちらの説明が分かりやすかったです⇒「redis、それは危険なほどのスピード」。そのRedis Cacheを基盤にしてAzureのサービスとしたものが、Azure Redis Cacheというわけです。
2. 実際に使ってみる
Azure Redis Cacheを有効化し、アプリケーションで利用するまでを手順を追って説明していきます。
2-1. Azure Redis Cacheを新規に作成する
Azureのポータルにて、Azure Redis Cacheサービスの利用開始をします。
「データ+ストレージ」のところに、Redis Cacheがありました。
※DNS名と、リソースグループは潰しています。適宜入力してください。
「作成」を押すとデプロイが始まり、数分待つと「実行中」になります。「実行中」になりましたら、設定画面から
- host:ホスト名
- port:ポート番号(デフォルトSSLが有効になっているため、6380)
- accessKey:アクセスキー
を取得してください。のちの設定で利用します。
2-2. ASP.NET MVCのアプリケーションを作成する
Visual Studioにて、新規のASP.NET MVCアプリケーションを作成します。
2-3. RedisSessionProvierをインストールする
Azure Redis Cache用のセッションプロバイダーを先ほど作成したアプリケーションにインストールします。
nugetを利用して、dllのダウンロード・参照追加、Web.configにサンプルコードの追加をしてもらいます。
プロジェクトを右クリックして、「NuGetのパッケージ管理」を選ぶとGUIでパッケージのインストールができます。
「Microsoft.Web.RedisSessionProvider」で絞り込み。
2-4. Web.configに定義を追加する
2-1で取得した定義をWeb.configに反映します。
<system.web>
...
<sessionState mode="Custom" customProvider="MySessionStateStore">
<providers>
<add name="MySessionStateStore"
type="Microsoft.Web.Redis.RedisSessionStateProvider"
host="XXXXXXX.redis.cache.windows.net"
port="6380"
accessKey="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
ssl="true" />
</providers>
</sessionState>
</system.web>
2-5. 動作確認用のコードを書く
動作確認用のコードは、Indexページにアクセスした時刻をSessionに記録し、
AboutページでSessionから復元する、といった動きにします。「time」をキーにSessionにデータを格納します。
public class HomeController : Controller
{
public ActionResult Index()
{
Session["time"] = DateTime.Now;
return View();
}
public ActionResult About()
{
ViewBag.Oldtime = Session["time"];
ViewBag.Now = DateTime.Now;
return View();
}
}
結果を、Aboutページで表示します。
@{
ViewBag.Title = "About";
}
<h2>@ViewBag.Title.</h2>
<p>
Indexページを開いた日時 @ViewBag.Oldtime
</p>
<p>
このページを開いた日時 @ViewBag.Now
</p>
3. 実行結果
時間が保存されてAboutページで復元されました!
本当にAzure Redis Cacheが利用されているかは、Redis Desktop Managerを使い、Redisに直接アクセスして確認します。
(Redis Desktop Managerを使ってみる←このあたりを参考)
timeというkeyで値が保管されていることを確認できました!
ちなみに上のRDMの結果は、2つのブラウザからアクセスしましたあとにスクリーンショットをとりました。
そのためセッション情報が2つ格納されていることが分かります。
4. おわりに
可用性の高いセッションサーバが簡単にできて便利ですね。
これがあるなら、SQL Serverをセッション管理に使う理由ってなんなんだろう。
5. 参考
「ASP.NET MVC5 実践プログラミング」 山田祥寛さん著
書籍のサンプルがAzure Redis Cacheのプレ版だったこともあり、本記事では最新版を対象にして書いてみました。