尝试使用Azure Redis Cache来管理ASP.NET的会话处理

0. 引言

在前一篇《整理ASP.NET的会话管理方法》中,我们总结了关于ASP.NET会话管理的方法。这一次,我们将整理使用Azure Redis Cache作为自定义会话管理的变体的步骤。

版本信息

namever.ASP.NET MVC4.5.2Microsoft.Web.RedisSessionProvider2.0.1

1. Azure Redis Cache 是什么

Redis Cache是一个开源的NoSQL数据库。虽然这篇文章有些旧,但这个解释很容易理解⇒”Redis,它的速度太惊人了”。Azure Redis Cache是以Redis Cache为基础的Azure服务。

2. 亲自尝试使用一下

我会按照步骤说明如何启用Azure Redis缓存并在应用程序中使用。

创建一个新的Azure Redis缓存

在Azure门户上,我将开始使用Azure Redis缓存服务。Redis缓存位于”数据+存储”部分。

AzurePortal.jpg

※DNS名称和资源组已省略,请适当输入。

切り替えることができるようになります。

    • host:ホスト名

 

    • port:ポート番号(デフォルトSSLが有効になっているため、6380)

 

    accessKey:アクセスキー

请获取。将在后续的设置中使用。

创建一个ASP.NET MVC应用程序。

在Visual Studio中,创建一个新的ASP.NET MVC应用程序。

安装RedisSessionProvider

请在刚刚创建的应用程序中安装用于 Azure Redis Cache 的会话提供程序。
请使用NuGet来下载dll并将其添加到引用中,并在Web.config中添加示例代码。
右键点击项目,选择“NuGet 包管理器”可以使用GUI来安装包。
过滤使用“Microsoft.Web.RedisSessionProvider”。

nuget.jpg

在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>

编写用于确认操作的代码。

在確認動作用的代碼中,我們將記錄訪問索引頁面時的時間到會話中,並在關於頁面中從會話中恢復它。我們將使用「時間」作為鍵將數據存儲到會話中。

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();
    }
}

结果将在关于页面上显示。

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

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

3. 运行结果

时间已在关于页面中得以保存并恢复!

result.JPG

使用Redis Desktop Manager直接访问Redis以确认是否真正使用了Azure Redis Cache。(参考使用Redis Desktop Manager)

result2.JPG

我确认了时间作为键名存储了值!顺便说一下,上面的RDM结果是在访问两个浏览器后截取的屏幕截图。因此可以知道会话信息被储存了两个。

4. 最后、总结

有一個可用性高且方便的會話伺服器是很方便的呢。如果有這個選擇的話,為什麼還要選擇使用SQL Server作為會話管理呢?

参考呢

山田祥寛先生所著の「ASP.NET MVC5実際のプログラミング」

由于书籍的示例是 Azure Redis Cache 的预发布版,因此本文将针对最新版本进行编写。

bannerAds