Asp.net 应用程序vs会话vs缓存

Asp.net 应用程序vs会话vs缓存,asp.net,Asp.net,对于以上所有内容,什么是合适的用例?会话和缓存似乎非常相似,我想不出应用程序有多大用处 会话是每个用户的。它不在用户之间共享 应用程序和缓存范围是应用程序范围。缓存可能会过期。如果您有可以更改的数据,比如说5分钟,您可以将其放入缓存,而如果您有未定期更新的数据,则可以将其放入应用程序变量。应用程序和会话状态有一个非常重要的区别: 应用程序状态是ASP.NET应用程序中所有类都可用的数据存储库。应用程序状态存储在服务器的内存中,比在数据库中存储和检索信息更快与特定于单个用户会话的会话状态不同,应用

对于以上所有内容,什么是合适的用例?会话和缓存似乎非常相似,我想不出应用程序有多大用处

会话是每个用户的。它不在用户之间共享


应用程序和缓存范围是应用程序范围。缓存可能会过期。如果您有可以更改的数据,比如说5分钟,您可以将其放入缓存,而如果您有未定期更新的数据,则可以将其放入应用程序变量。

应用程序和会话状态有一个非常重要的区别:

应用程序状态是ASP.NET应用程序中所有类都可用的数据存储库。应用程序状态存储在服务器的内存中,比在数据库中存储和检索信息更快与特定于单个用户会话的会话状态不同,应用程序状态适用于所有用户和会话。因此,应用程序状态是存储少量经常使用的数据的有用位置,这些数据不会从一个用户更改到另一个用户


另一方面,缓存允许您将需要大量服务器资源才能创建的对象存储在内存中。它提供了强大的功能,允许您自定义项目的缓存方式和缓存时间。您可以设置大量属性,如优先级和过期时间


虽然它们可能看起来很相似,但从最广泛的意义上讲,它们是截然不同的,在ASP.NET应用程序中扮演着不同的角色。

会话用于获取特定于用户的信息。通常,您会保存用户名、用户首选项,如屏幕名称、购物车id(如果您正在销售任何商品)、电子邮件等

当您拥有所有人共享的信息时,通常使用缓存。通常是为了减少对数据库的长进程或点击。IE您想显示前n篇文章。您可以对此设置时间限制,这样它将在一段时间后刷新日期


应用程序变量适用于要保存在服务器上的静态信息。这可能是媒体文件所在的位置。

内置inproc会话对象有一个非常重要的限制,其他答案都没有指出,这限制了它在高并发性网站中的使用。特别是,如果更改代码中的任何会话项,请求将暂停并等待,直到完成对会话对象的所有读取请求。在这种情况下,缓存是更好的选择:


这些答案都没有足够清楚地说明缓存的一个非常重要的属性-它具有应用范围,并且被所有用户共享!所有用户都可以使用缓存中存储的任何数据。您仍然可以在缓存中存储只对特定用户可用的数据,但必须使用该用户独有的缓存键值,例如,
cache.Add(“UserData”)+userID,data…

您可能需要添加cookie,querystring和viewstate这里讨论:会话似乎是您95%的时间都在使用的东西。我猜缓存可以用于页面上使用查询的组件。我认为应用程序状态没有什么用处,这取决于应用程序。如果您的内容非常耗时,请为了收集和聚合页面视图,将其缓存在您自己的服务器上是有意义的,这样每个用户都可以获得相同的缓存内容。但是,用户所经历的某个过程的特定内容通常会放在会话中。ApplicationState可用于配置或访问外部服务的令牌。非常好地使用appli阳离子对象是限制同一用户的多会话。每当用户登录时,在应用程序中创建他的条目,并在会话结束时将其删除。现在,当应用程序已经保存userid条目,这意味着一个活动会话已经在进行中时,我们所说的内存中需要大量服务器资源来创建的
对象是什么意思f我必须存储一个字符串键值对(所有用户都可以访问)然后我会将其存储在应用程序状态,如果我必须存储一个常用文件的内容,那么我会将其存储在应用程序缓存中。这是一个公平的例子吗?如果所有内容都只存储在应用程序的主内存中,那么为什么将其保存在缓存中除了具有过期等功能之外会有任何好处呢应用程序状态和缓存都占用了应用程序的主内存。不是吗?@RBT尽管它们都使用服务器端内存,但缓存可能会因多种因素而失效,例如优先级、时间或依赖项(例如缓存或文件或目录中的另一项)。我会阅读“缓存应用程序数据概述”答案中提供的链接,以便更好地了解这些功能。缓存和会话是否存在存储差异。或者,除非未明确实现,否则它们都保存在工作进程内存中。因为缓存的大小有MB限制。这是一个非常重要的区别,即在这类问题中没有太多强调。