asp.net - 实际上,删除 session 状态请求锁是否会实际影响站点

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

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

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

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

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

panic !显然,这与 session 状态的预期方式背道而驰,就线程安全而言,这是一个可怕的前景。但是......在我们建立的许多网站中, session 状态很少用于比“哪个用户 id 当前处于事件状态”更复杂的事情 - 这很少被写入。它可用于在 2 页之间传输(大)数据,也可用于存储奇数设置。 ...在很多情况下,线程安全很少会成为问题,那么性能权衡是否真的值得,或者是否值得冒风险移除锁并冒险获得响应速度显着提高的网站?

最佳答案

您可以尝试我在 Redis 中存储 .NET session 的版本,它竭尽全力不锁定 session 。根据个人经验,我们确实看到在移除锁定后我们大量使用 AJAX 的 Web 应用程序的速度有所提高:

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

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

关于asp.net - 实际上,删除 session 状态请求锁是否会实际影响站点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23950937/

相关文章:

c# - 尽管安装了 AspNetCoreModule,但在 IIS 中运行 ASP.NET Core 应用程序时出现 0x8007000d 错误 500.19

php - 带有 session /cookie 的 CORS 请求

mysql - 使用 session ID 过滤数据

azure - 具有 Azure SQL 数据库的分布式锁管理器

redis - Redis-Cli 中的定时查询?

c# - foreach循环仅显示gridview的最后一个值

c# - Facebook实时更新: Validating X-Hub-Signature SHA1 signature in C#

c# - 检查 asp.net mvc 中是否已经过去了 x 个月

node.js - NodeJS cookie 不适用于 Express 4 中的 session

javascript - 如何在redis中使用单个键插入多个json数据