缓存与会话的优势

在 Session 和 Cache 中存储数据表有什么区别? 有哪些优点和缺点?

因此,如果它是一个简单的搜索页面,返回数据表中的结果并将其绑定到网格视图。如果用户“ a”搜索和用户“ b”搜索,最好将其存储在 Session 中,因为每个用户很可能有不同的结果,或者我仍然可以将他们的每个搜索存储在 Cache 中,或者因为只有一个缓存而没有意义。我想基本上我想说的是 Cache 会被覆盖吗。

80351 次浏览

关键区别在于每个用户的会话,而缓存将用于应用程序范围的项目。

正如在其他答案中指出的那样,只要提供一个密钥(通过会话或 cookie) ,就可以将每个用户的信息存储在缓存中。然后,您将拥有更多的控制来使缓存中的项过期,并设置对它们的依赖关系。因此,如果有问题的 DataTable 将定期更改,那么缓存可能是一个合适的选择。否则,如果是静态会话可能更合适。值得一看的 Steven Smith 在 dnrtv 有一个关于缓存的优秀视频

这完全取决于你想达到什么目标,你有多少时间。关于如何在应用程序中存储状态,还有其他一些可供选择的方法。 根据表的大小,可以考虑将状态存储在 cookie 中(如果是敏感信息,则加密)。或者,如果它是应用程序范围的数据,那么您可以在页面或类上使用静态字段。还有 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?

(不,使用包含用户名和搜索词的密钥的缓存。)。
(是的,使用搜索词的一个键来使用缓存)。

老实说,如果您的开发进展不是很顺利,我会考虑将缓存/状态问题留到以后解决——您甚至可能不需要它。

性能调优的前三条规则是: 1、测量,2、再测量一些。3、再测量一次..。

缓存位于 Application 范围中,目的是减少获取数据的次数。会话位于用户的会话范围中,用于给出特定的用户状态。

这取决于如何为 ASP.NET 配置会话。您是将会话存储在数据库中还是存储在内存中?如果您在内存中使用的是单独的服务器,还是使用当前的网络服务器进行会话?

当您使用诸如数据表之类的东西时,可能会产生性能影响,这取决于如何为您设置这些东西,数据表告诉我,您可能存储了大量的数据。

此外,Session 存储在每个用户中,并通过每个用户的 Session 票来检索,如果他们不接受 cookie 并且您已经将 ASP.NET 设置为无 cookie 模式,则会存储在 Session cookie 中或 URL 中。您所缓存的任何内容都将在应用程序级别缓存,并且可用于所有用户会话,这些会话可能是您想要的,也可能不是您想要的。

会话为每个用户,缓存为应用程序。

根据 IIS 辅助进程的过期时间(滑动或固定)和内存约束,可以并且将自动删除 Cache 中的项。

所以基本上 Cache 中的项不能保证存在,但 Session 会一直存在直到会话结束。

以每个用户为基础(通过 Session 或创造性地使用 Cache)存储项可能导致大量内存使用,因此应该仔细考虑。

除此之外,如果 IIS 重置辅助进程,则可能会丢失 Cache 和 Session。

一个重要的区别是,缓存中的项可以在指定的时间后过期(将从缓存中删除)。放入会话中的项将保留在那里,直到会话结束。

当可用内存量变小时,ASP.NET 还可以从缓存中删除项。

另一个区别是: 会话状态可以保持在外部(状态服务器、 SQL 服务器) ,并在 Web 应用的几个实例之间共享(用于负载平衡)。缓存不是这样的。

除了这些不同之外(正如其他人所指出的) : 会话是每个用户/会话,而缓存是每个应用程序。

参见 这个答案

会话可能会扼杀你的应用程序性能,除非你使用一些后端提供商,如 memcached 或速度。一般来说,你应该避免它。

另一个重要的区别是,如果执行并发异步 Ajax 请求,会话状态将被阻止将影响性能

据我所知,这完全取决于你的需要。

无论何时需要为用户维护状态,那么在使用会话时都必须非常小心。默认设置是“ InProc”,它使用单个服务器的内存,在基于云的应用程序中不能很好地工作。这可能适用于那些在多实例 web-farm 环境中托管应用程序的人。WindowsAzure 负载均衡器在连接的节点中使用循环分配。

会话存储中有多个选项。SQLServer 还可以用作会话状态的存储。自定义会话技术可以在天蓝色上使用,比如表存储提供程序等。

缓存也存储在服务器的内存中,但它与用户无关。同一池中的任何用户都可以访问应用程序缓存数据。简而言之,在云上,我们需要使用云提供商提供的缓存服务。Azure 提供 WindowsAzure 分布式缓存服务。

事实上,在应用程序中应用状态管理技术时,开发人员并不关心状态管理技术的影响。它

“如果你的客户没有云计算支持,那么你就不用担心云计算场景”