网站中的动态业务对象,如订单、个人资料等,应该存储在用户会话中还是使用ASP.Net缓存?
我曾经使用过将业务对象存储在会话中的网站,但我想知道...使用缓存有什么优点或缺点?
如果对象可以在用户会话之间共享,则使用缓存。如果对象对每个会话都是唯一的——可能是因为它们受权限控制——则将其存储在会话中。进程内会话本身存储在缓存中,因此决定因素应该是数据的范围。
缓存就是缓存。你永远不能依赖条目存在,所以在这方面不应该做出任何假设:要准备好直接到数据库(或其他地方)重新获取数据。
另一方面,会话更适合存储对象,尽管我个人倾向于避免使用会话存储而选择使用数据库。我通常通过在不透明的ISessionStoreService接口后面抽象存储来实现这一点:
interface ISessionStore
{
T GetEntry<T>(string key);
void SaveEntry<T>(string key, T entry);
}
然后“依赖注入”适当的实现,可以是InmemorySessionStore、DbSessionStore或其他。
会话对象适用于仅用户数据,而缓存对象更适合应用程序共享的数据。
关键是要确定您要存储的内容是否为仅限于某个用户或需要在整个应用程序中共享。
会话 => 具有逐步界面的网页(例如在线测试)。
缓存 => 以某种天气小部件显示的信息(就像google在其igoogle.com页面上拥有的那种)
希望这可以帮助。