我最近一直在研究 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 应用程序的速度有所提高:
关于asp.net - 实际上,删除 session 状态请求锁是否会实际影响站点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23950937/