我正在编写ASP.NET MVC5应用程序,我知道session["foo"] = bar
顺序运行的操作,现在为了避免这种情况,我想将一些信息存储到MemoryCache对象而不是会话中,但我怀疑的是:缓存是否像会话一样管理?所以我放置ObjectCache.Set("foo", bar, null)
的动作是按顺序运行的,就像会话一样?
我知道缓存和会话之间的范围差异,但对我而言,这并不重要。
感谢大家
答案 0 :(得分:3)
我了解到您尝试避免页面上的会话锁定。
缓存不会锁定整页访问权限,因此答案是缓存不是按顺序运行的。
有两种缓存,一种在内存中使用静态字典来保存数据,另一种在数据库中保存缓存,使用文件来保存数据。这两个仅在读/写期间锁定数据,而会话锁定页面从开始到结束的完全访问。
所以使用缓存,但关闭您遇到此问题的页面上的会话。还要记住,如果你使用web garden,那么内存上的缓存可以有多个不同的数据,因为内存缓存在每个池上都有自己的静态空间。
每个用户的会话也不同,所有用户的缓存都是相同的。
答案 1 :(得分:1)
我认为您正在寻找的术语是线程安全 - 尤其是并发访问,通常是写作。
似乎根据MSDN,System.Runtime.Caching.MemoryCache
确实是线程安全的。另见:Is MemoryCache.Set() thread-safe?