【发布时间】:2011-02-23 20:15:18
【问题描述】:
以上所有内容的合适用例是什么?似乎会话和缓存非常相似,我想不出对应用程序有多大用处。
【问题讨论】:
-
您可能想要添加 cookie、查询字符串和视图状态
标签: asp.net
以上所有内容的合适用例是什么?似乎会话和缓存非常相似,我想不出对应用程序有多大用处。
【问题讨论】:
标签: asp.net
Application 和 Session State 有一个很重要的区别:
应用程序状态是一个可供 ASP.NET 应用程序中所有类使用的数据存储库。应用程序状态存储在服务器的内存中,比在数据库中存储和检索信息要快。 与特定于单个用户会话的会话状态不同,应用程序状态适用于所有用户和会话。因此,应用程序状态是存储少量常用数据的有用地方,这些数据不会从一个用户更改为另一个用户
Application State Overview
Session State Overview
另一方面,缓存允许您将需要大量服务器资源才能创建的对象存储在内存中 - 它提供了强大的功能,允许您自定义项目的缓存方式和缓存时间缓存 - 您可以设置广泛的属性,例如优先级和过期时间。
Caching Application Data Overview
虽然它们可能看起来很相似,但它们明显不同,并且在最广泛的 ASP.NET 应用程序中扮演着不同的角色。
【讨论】:
objects in memory that require extensive server resources to create 是什么意思?如果我必须存储一个字符串键值对(所有用户都可以访问),那么我会将它存储在 Application 状态,如果我必须存储一个常用文件的内容,那么我会将它存储在 Application缓存。这是一个公平的例子吗?如果所有内容都仅存储在应用程序的主内存中,那么除了具有过期等功能之外,为什么将其保存在缓存中会有任何好处。归根结底,应用程序状态和缓存都占用了应用程序的主内存。不是吗?
会话是每个用户的。它不会在用户之间共享。
应用程序和缓存范围是应用程序范围的。缓存可能会过期。如果您有可以更改的数据,比如说 5 分钟,则可以将其放入缓存中,而如果您有不定期更新的数据,则可以将其放入应用程序变量中。
【讨论】:
会话用于用户特定信息。通常,您会保存用户名、用户偏好,如屏幕名称、购物车 ID(如果您正在销售任何东西)、电子邮件等
当您拥有在所有人之间共享的信息时,通常会使用缓存。通常是为了减少对数据库的长进程或命中。 IE要显示前n篇文章。您可以为此设置时间限制,因此它会在一段时间后刷新日期
应用程序变量适用于您要保存在服务器上的静态信息。这可能是媒体文件所在的位置。
【讨论】:
这些答案都没有足够清楚地说明缓存的一个非常重要的属性 - 它具有应用程序范围并且被所有用户共享!您存储在缓存中的任何数据都可供所有用户使用。您仍然可以在缓存中存储您希望仅供特定用户使用的数据,但您必须使用该用户唯一的缓存键值,例如Cache.Add("UserData" + userID, data...
【讨论】:
内置的 inproc 会话对象有一个非常重要的限制,其他答案都没有指出,这限制了它在高并发网站中的使用。具体来说,如果您更改代码中的任何会话项,请求将停止并等待,直到对会话对象的所有读取请求都完成。在这种情况下,缓存是更好的选择:
I just discovered why all ASP.Net websites are slow, and I am trying to work out what to do about it
【讨论】:
关于会话与缓存的另一件事。如果在更改依赖对象时需要使会话中存储的数据无效或重新加载,则可能很难做到这一点。它们的缓存可能是更好的选择。
【讨论】: