【问题标题】:Realistically, will removing the session state request lock actually affect the site实际上,移除会话状态请求锁实际上会影响站点
【发布时间】:2014-07-19 23:56:27
【问题描述】:

我最近一直在为 ASP.Net 使用不同的会话状态提供程序,并提出了看起来最好的方法(性能和实现方面)。

使用https://github.com/TheCloudlessSky/Harbour.RedisSessionStateStore

这非常有效,而且实现起来非常简单。唯一的问题是它强制请求锁定 - 因此如果有请求打开,浏览器必须等待。这在很多时候都很好,但是当你结束某个长时间运行的进程并且用户想要放弃时,用户会一直挂起,直到长时间运行的进程完成。

现在 - 这可以通过从提供程序中删除锁定来解决。这很容易将 lock = true 的行更改为 lock = false,并更改更新,因此它不会注意到“&& state.Locked && state.LockId == lockId”

恐慌!显然,这违背了会话状态的意图,并且就线程安全而言,这是一个可怕的前景。但是......在我们建立的许多网站中,会话状态很少用于比“哪个用户 id 当前处于活动状态”更复杂的事情——这很少被写入。它可用于在 2 页之间传输(大)数据,也可用于存储奇数设置。 ...在很多情况下,线程安全很少会成为问题,那么性能折衷是否真的值得,或者是取消锁定并冒险获得一个响应速度更快的网站值得冒险?

【问题讨论】:

    标签: asp.net session redis thread-safety session-state


    【解决方案1】:

    您可以尝试我在 Redis 中存储 .NET 会话的版本,它竭尽全力不锁定会话。从个人经验来看,我们确实看到了在移除锁定后我们重度 AJAX 的网络应用程序的加速:

    NuGet:https://www.nuget.org/packages/RedisSessionProvider

    文档:https://github.com/welegan/RedisSessionProvider

    【讨论】:

      【解决方案2】:

      你也可以试试 redis 的 aspnet session state provider,这个博客在这里解释了http://blogs.msdn.com/b/webdev/archive/2014/05/12/announcing-asp-net-session-state-provider-for-redis-preview-release.aspx

      希望这会有所帮助。

      【讨论】:

      • 这对不被会话提供者锁定有何帮助?
      猜你喜欢
      • 2020-03-27
      • 2018-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多