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

Den*_*ger 2 c# asp.net session caching

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

另外,通常情况下,使用会话/缓存比从数据库或Web服务检索数据更加明智,或者是否有更快速检索的数据限制?

M4N*_*M4N 6

会话和缓存之间的一些区别:

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

至于表现:

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