应用程序与会话与缓存

问题描述 投票:66回答:5

上述所有内容的适当用例是什么?看起来会话和缓存非常相似,我想不出应用程序有多大用处。

asp.net
5个回答
101
投票

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

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

Application State Overview Session State Overview

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

Caching Application Data Overview

虽然它们可能看起来很相似,但它们明显是分开的,并且在最广泛的意义上在ASP.NET应用程序中扮演不同的角色。


20
投票

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

应用程序和缓存范围适用于整个应用缓存可以过期。如果您有可以更改的数据,比如说5分钟,则可以将其放在缓存中,而如果您的数据没有定期更新,则可以放置在应用程序变量中。


6
投票

会话用于特定于用户的信息。通常,您会保存用户名,用户首选项,如屏幕名称,购物车ID(如果您要销售任何东西),电子邮件等

缓存通常用于当您拥有所有人共享的信息时。通常是减少数据库的长进程或命中。 IE你要显示前n篇文章。您可以在此设置时间限制,因此它会在经过一段时间后刷新日期

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


2
投票

这些答案都不足以说明Cache的一个非常重要的属性 - 它具有应用程序范围并且由所有用户共享!您存储在缓存中的任何数据都可供所有用户使用。您仍然可以将数据存储在您希望仅供特定用户使用的缓存中,但您必须使用该用户独有的缓存键值,例如Cache.Add("UserData" + userID, data...


1
投票

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

I just discovered why all ASP.Net websites are slow, and I am trying to work out what to do about it

© www.soinside.com 2019 - 2024. All rights reserved.