|
|
1
24
如果对象可以在用户会话之间共享,则使用缓存。如果对象对于每个会话都是唯一的——也许是因为它们受权限控制——那么就将其存储在会话中。进程内会话本身存储在缓存中,因此决定因素应该是数据的范围。 |
|
|
2
7
缓存就是这样——缓存。你永远不能依赖那里的条目,所以在这方面不必做出任何假设:准备好直接去数据库(或其他任何地方)重新提取数据。 另一方面,Session更适合存储对象,尽管就我个人而言,我试图避免使用Session存储,而使用DB。我通常通过抽象出不透明的商店来做到这一点 ISessionStoreService 接口:
然后“依赖注入”适当的实现,无论是 InmemorySessionStore , DbSessionStore 或者别的什么。 |
|
|
3
2
ASP。NET系统缓存对应用程序是全局的,因为会话对当前用户是唯一的。如果您选择使用全局缓存来存储对象,则需要创建一个对象标识策略,以便为每个用户获取正确的对象。 如果你想提高性能,最好更换ASP。NET会话状态,具有分布式内存缓存,如微软的速度。微软发布了关于如何取代会话使用以瞄准Velocity的文章。您还可以以相关的方式使用Memcache或其他类似产品。 |
|
|
4
2
会话对象适用于仅限用户的数据,另一方面,缓存对象更适合应用程序共享的数据。
会话=>具有分步界面的网页(例如在线测试)。
|
|
|
5
1
虽然您可以将业务对象存储在Cache中,但Cache的设计目的是提高性能,而不是状态管理。想象一下,你有一个从数据库中获取1000条记录的过程(大约需要3秒),你需要它几分钟。您可以将对象存储在缓存中,并设置其过期日期、优先级和依赖关系(如SqlDependency或FileDependency),因此对于下一个请求,您可以使用缓存数据,而不是从数据库中检索。您可以将对象存储在Session中,但默认情况下无法设置Session的依赖关系。Cache还有一个独特的行为,当系统需要内存时,它会根据优先级从缓存中释放对象。缓存对象对应用程序是全局的,并在所有用户之间共享,但会话不共享,可供每个用户使用(会话)。 |