在会话或缓存中保存值 - 差异? ASP.NET

时间:2011-05-31 07:57:53

标签: c# asp.net session caching

我想知道我何时应该使用Session以及何时应该使用缓存。性能有差异吗?他们中的一个可以更好地处理大量数据吗?缓存是否应仅用于与应用程序关联的内容,而会话应仅用于与当前会话/用户关联的内容? 保存我从会话或缓存中的数据库收到的值是否更明智 - 假设我使缓存密钥唯一,是否存在差异?例如。 Cache["MyKey"+UserId.ToString()]

另外,一般来说,使用会话/缓存比从数据库或Web服务检索数据要聪明得多,还是可以更快地检索数据的限制?

1 个答案:

答案 0 :(得分:6)

会话和缓存之间存在一些差异:

  • 会话是按用户进行的,而缓存是按应用程序进行的
  • 您可以将会话数据存储在进程外(SessionServer或SqlServer),例如使用网络农场时
  • 您在会话中保留的内容将一直保留到会话终止/放弃或超时
  • 使用缓存,您可以指定在一段时间后(绝对)或在一段时间内未访问(滑动)后自动删除项目
  • 当数据库中的某些数据发生更改时,您还可以使用SqlCacheDependencies从缓存中删除项目
  • 如果可用内存不足,ASP.NET运行时也会自动从缓存中删除项目

至于表现:

  • 只要您使用InProc会话状态,我猜会话和缓存之间不会有任何性能差异。
  • 一旦使用外部会话状态,性能显然会低于InProc缓存,但我没有任何数字(取决于网络,SQL服务器电源等)。
  • BTW:还有分布式缓存解决方案,允许拥有外部共享缓存(类似于进程外会话状态)。