【问题标题】:Access differences between cache and session in ASP.NET MVCASP.NET MVC 中缓存和会话的访问差异
【发布时间】:2015-11-20 11:16:09
【问题描述】:

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

谢谢大家

【问题讨论】:

  • ran sequentially 是什么意思?
  • 对不起,我忘记了一些信息,如果同一个用户同时调用两个设置了会话变量的操作,我注意到请求是同步服务的,我读到这是因为会话是静态的并且 as.net 避免了顺序运行请求的问题
  • 不,缓存不是按顺序运行的,但您必须在您进行调用的页面上禁用会话...(否则该页面处于您试图避免的会话锁定之下)
  • @Aristos 非常感谢!这就是我需要的!

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


【解决方案1】:

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

缓存没有锁定全页访问所以答案是缓存没有顺序运行。

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

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

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

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

【讨论】:

  • 好的,谢谢,我不使用 Web Garden,所以对于我的场景来说,使用 MemoryCache 是件好事,非常感谢你澄清了我的疑惑!
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    相关资源
    最近更新 更多