caching与会话的优点
在Session vs Cache中存储数据表有什么区别? 有什么优点和缺点?
所以,如果它是一个简单的search页面,返回一个数据表格的结果,并将其绑定到一个gridview。 如果用户'a'search和用户'b'search,将它存储在Session中是否更好,因为每个用户最有可能具有不同的结果,或者我仍然可以将他们的每个search存储在Cache中,或者是没有意义的,只有一个caching。 我想基本上我想说的是Cache会被覆盖。
一个重要的区别是,caching中的项目可能会在指定的时间后过期(将从caching中删除)。 放入会话的项目将保持在那里,直到会话结束。
可用内存量变小时,ASP.NET还可以从caching中删除项目。
另一个区别是:会话状态可以保持在外部(状态服务器,SQL服务器),并在您的Web应用程序的多个实例之间共享(用于负载平衡)。 caching不是这种情况。
除了这些差异(正如其他人所指出的):会话是每用户/会话,而caching是每个应用程序。
AFAIK,关键区别是会话是每个用户,而caching将是应用程序范围的项目。
正如在其他答案中指出的,您可以将每个用户的信息存储在caching中,为您提供密钥(按会话或cookie)。 然后你可以有更多的控制来使caching中的项目过期,还可以设置它们的依赖关系。 所以,如果有问题的数据表会定期更改,那么caching可能是一个合适的select。 否则,如果是静态会话可能会更合适。 史蒂文·史密斯在dnrtv有一个很好的videocaching值得一试。
这真的取决于你想要达到的目标,你有多less时间。 关于如何在应用程序中存储状态,还有其他一些select。 根据表格的大小,您可以考虑将状态存储在cookie中(如果是敏感信息,则encryption)。 或者,如果它是应用程序范围的数据,则在页面或类上使用静态字段。 还有Application对象。
更新 :我认为你必须问自己的关键问题是谁应该看到这些数据。
Are they going to access the data frequently?
(不,不要打扰)。
Is it going to change?
(不,使用静态字段或应用程序)。
Is it acceptable for user a and user b to see the same results?
(不,使用包含用户名和search项的键的caching)。
(是的,使用search项的关键字使用caching)。
老实说,如果你的发展还不是很远,我会考虑把caching/状态问题留到以后的日子 – 你可能甚至不需要它。
性能调整的前三条规则是:1.测量,2.测量更多。 再次测量…
另一个重要的区别是,如果执行并发的asynchronousAjax请求, 会话状态将被阻止 ,这将影响性能
caching位于应用程序范围内,目的是减less获取数据的次数。 会话在用户的会话范围内,目的是给出特定的用户状态。
那么这取决于你如何为ASP.NETconfiguration会话。 你是否将会话存储在数据库或内存中? 如果在内存中使用单独的服务器,或者使用当前的Web服务器进行会话?
取决于如何为您设置的东西,当您使用类似于数据表的东西时,性能可能会受到影响,这会告诉我您可能正在存储大量数据。
此外Session还存储在每个用户中,并且每个用户都通过会话票据进行检索,Session票据存储在Session cookie或URL中,如果他们不接受Cookie,并且您已经将ASP.NET设置为无Cookie模式。 您caching的任何内容都将在应用程序级caching,并可供所有用户会话使用,可能会或可能不会。
会话是每个用户,caching是为应用程序。
caching中的项目可以根据IIS工作进程的到期时间(滑动或固定)和内存限制自动删除。
所以基本上Cache中的项目永远不能保证存在,但Session将一直存在,直到会话结束。
以每个用户为单位存储项目(通过会话或Cache的创造性使用)可能会导致大量的内存使用,因此应仔细考虑。
最重要的是,如果IIS重置工作进程,则可能会丢失caching和会话。
看到这个答案 。
会话可以杀死你的应用程序的性能,除非你使用一些像memcached或速度的后端提供程序。 一般来说,你应该避免它。
会话我使用特定的caching不在。 这篇文章是有帮助的 。