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

时间:2015-11-20 11:16:09

标签: c# asp.net asp.net-mvc session caching

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

感谢大家

2 个答案:

答案 0 :(得分:3)

我了解到您尝试避免页面上的会话锁定。

缓存不会锁定整页访问权限,因此答案是缓存不是按顺序运行的。

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

所以使用缓存,但关闭您遇到此问题的页面上的会话。还要记住,如果你使用web garden,那么内存上的缓存可以有多个不同的数据,因为内存缓存在每个池上都有自己的静态空间。

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

阅读更多内容:ASP.NET Server does not process pages asynchronously

答案 1 :(得分:1)

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

似乎根据MSDN,System.Runtime.Caching.MemoryCache确实是线程安全的。另见:Is MemoryCache.Set() thread-safe?