Help us understand the problem. What is going on with this article?

ASP.NETのセッション管理にAzure Redis Cacheを使ってみる

More than 3 years have passed since last update.

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がありました。

AzurePortal.jpg

※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」で絞り込み。

nuget.jpg

2-4. Web.configに定義を追加する

2-1で取得した定義をWeb.configに反映します。

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にデータを格納します。

HomeController.cs
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ページで表示します。

About.cshtml
@{
    ViewBag.Title = "About";
}
<h2>@ViewBag.Title.</h2>

<p>
    Indexページを開いた日時 @ViewBag.Oldtime
</p>
<p>
    このページを開いた日時 @ViewBag.Now
</p>

3. 実行結果

時間が保存されてAboutページで復元されました!

result.JPG

本当にAzure Redis Cacheが利用されているかは、Redis Desktop Managerを使い、Redisに直接アクセスして確認します。
Redis Desktop Managerを使ってみる←このあたりを参考)

result2.JPG

timeというkeyで値が保管されていることを確認できました!
ちなみに上のRDMの結果は、2つのブラウザからアクセスしましたあとにスクリーンショットをとりました。
そのためセッション情報が2つ格納されていることが分かります。

4. おわりに

可用性の高いセッションサーバが簡単にできて便利ですね。
これがあるなら、SQL Serverをセッション管理に使う理由ってなんなんだろう。

5. 参考

「ASP.NET MVC5 実践プログラミング」 山田祥寛さん著

書籍のサンプルがAzure Redis Cacheのプレ版だったこともあり、本記事では最新版を対象にして書いてみました。

84zume
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした