ASP.NET MVC中缓存和会话之间的访问差异

本文关键字:之间 访问 会话 NET MVC 缓存 ASP | 更新日期: 2023-09-27 18:22:46

我正在编写一个ASP.NET MVC5应用程序,我知道session["foo"] = bar的操作是按顺序运行的,现在为了避免这种情况,我想将一些信息存储到MemoryCache对象中,而不是存储在会话中,但我的疑问是:缓存是否像会话一样管理?所以我放置ObjectCache.Set("foo", bar, null)的操作是按顺序运行的,就像会话一样?我知道缓存和会话之间的作用域差异,但对我来说,在这种情况下,这并不重要。

感谢大家

ASP.NET MVC中缓存和会话之间的访问差异

我知道您试图避免页面上的会话锁定。

缓存没有锁定全页访问,因此答案是缓存没有按顺序运行。

有两种缓存,一种是在内存中使用静态字典来保存数据,另一种是将缓存保存在数据库中,使用文件来保存数据。它们都仅在读/写期间锁定数据,而会话从开始到结束锁定页面的完全访问

因此,请使用缓存,但在出现此问题的页面上关闭会话。还要记住,如果你使用网络花园,那么内存上的缓存可以有多个不同的数据,因为内存缓存在每个池上都有自己的静态空间。

此外,每个用户的会话不同,所有用户的缓存都相同。

还有一些需要阅读的内容:ASP.NET服务器不异步处理页面

我认为您要寻找的术语是线程安全,尤其是在并发访问方面,通常是写。

似乎根据MSDN的说法,System.Runtime.Caching.MemoryCache确实是线程安全的。另请参阅:MemoryCache.Set()线程安全吗?