【问题标题】:Where store cache data in asp.net web application? [duplicate]在 asp.net Web 应用程序中存储缓存数据的位置? [复制]
【发布时间】:2017-05-10 18:46:41
【问题描述】:

我不明白应该使用哪个容器来存储缓存:

HttpContext.Current.Session 还是 MemoryCache

HttpContext.Current.SessionMemoryCache 中存储的数据有什么区别?

【问题讨论】:

  • 内存、数据库、Redis。取决于您要缓存的内容以及您是拥有一台服务器还是多台服务器。内存仅在您有单个服务器时才有效。 Session 不是缓存,它仅存储当前会话的数据,并且可能使用内存或数据库进行存储。是所有请求都可以访问的实际内存缓存。
  • MemoryCache 不是 ASP.Net 特定的缓存机制。它也可以被 Windows 窗体应用程序使用。当您考虑在您的 ASP.Net 网站中存储一些应该在 Web 调用中持续存在的数据时,您应该考虑Application vs Session vs Cache。 ASP .Net 应用程序中的缓存是指System.Web.Caching.Cache 类(在 System.Web dll 中)与System.Runtime.Caching.MemoryCache(在 System.Runtime.Caching.dll 中)类不同。

标签: c# asp.net


【解决方案1】:

当您为特定用户存储数据时,您可以使用 HttpContext.Current.Session

MemoryCache 是当您为所有用户存储数据时,数据在所有用户之间共享

【讨论】:

  • Session 存储特定会话而非用户的数据。如果用户退出,数据就消失了。
  • 此外,会话可能使用内存或数据库进行存储。如果您有 2 台以上的服务器,则数据库存储是唯一的选择。 Session 不是缓存的好选择。
  • @PanagiotisKanavos,如果您有 2 台以上的服务器,数据库存储是唯一的选择... 不,您应该考虑改用 Pooled Session
  • @Rahul 将数据存储在哪里?如果您有很多服务器,则需要共享存储。
  • @PanagiotisKanavos,我的意思不仅仅是 DB .. 它甚至可能是 State Server Mode 在这种情况下会话对象存储在单独的进程中
【解决方案2】:

您唯一的问题是:SessionCache 之间的区别......好吧,Session 特定于帐户或用户帐户(每个用户特定的访问权限都是会话的一部分),而 Cache 是应用程序的全局.无论cache 中的用户会话如何,您只存储将在整个应用程序中使用的通用数据。现在,您的缓存存储再次可以是持久的(如果您选择存储在 DB 或分布式缓存中,如 RedisAzure memcache / 非持久如 ASP.NET HttpContext.Cache 对象,它将缓存对象存储在工作进程中 @987654329 @ ...因此,如果工作进程通过回收应用程序池而死亡,您将丢失缓存对象)

此外,通过会话,如果您想跨所有 Web 服务器访问会话(在负载平衡的环境中),那么您应该考虑使用 Pooled Session

【讨论】:

  • 你是什么意思“池会话”?谷歌搜索ASP.NET pooled session 不会返回任何结果。你的意思是别的吗?顺便说一句,网络农场确实使用共享存储,无论是 SQL 还是 Redis 数据库。对于网站来说,这些都是外部数据库
猜你喜欢
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 2011-11-29
  • 2018-07-05
  • 2014-01-05
  • 1970-01-01
相关资源
最近更新 更多