站点的动态业务对象应该存储在用户会话中,还是应该使用ASP.Net缓存(订单、配置文件信息等对象)?
我曾经使用过使用会话来存储业务对象的站点,但我使用的是wondering...What。缓存有什么优点或缺点?
发布于 2009-01-29 15:33:31
如果对象可以在用户会话之间共享,则使用缓存。如果对象对于每个会话都是唯一的--可能是因为它们由权限控制--则将其存储在会话中。进程中的会话本身存储在缓存中,因此决定因素实际上应该是数据的范围。
发布于 2009-01-29 15:37:23
缓存就是--缓存。您永远不能依赖那里的条目,因此在这方面不能做任何假设:准备直接转到DB (或其他任何地方)来重新获取数据。
另一方面,会话更适合于存储对象,尽管就我个人而言,我尽量避免使用会话存储而倾向于使用DB。我通常通过将存储抽象为不透明的ISessionStoreService接口来做到这一点:
interface ISessionStore
{
T GetEntry<T>(string key);
void SaveEntry<T>(string key, T entry);
}然后是“依赖注入”适当的实现,不管是InmemorySessionStore、DbSessionStore还是其他什么。
发布于 2009-01-29 15:33:58
ASP.NET系统缓存对于应用程序是全局的,而会话对于当前用户是唯一的。如果您选择使用全局缓存来存储对象,则需要创建一个对象标识策略,以便根据每个用户获得正确的对象。
如果您希望提高性能,最好用分布式内存缓存替换ASP.NET会话状态,比如微软的velocity。微软已经发布了关于如何将会话使用替换为目标Velocity的文章。您还可以以相关方式使用Memcache或其他类似产品。
https://stackoverflow.com/questions/492043
复制相似问题