缓存用户数据以避免多余的数据库跳闸

时间:2010-01-15 20:36:12

标签: asp.net-mvc database caching

在为ASP.NET MVC站点创建概念证明并确保适当分离关注点之后,我注意到我正在进行大量昂贵的冗余数据库调用以获取有关当前用户的信息。

作为历史上的桌面和服务人员,我首先想到的是将db结果缓存到某些static中。它没有花太多时间进行搜索,看到这样做会使当前用户的数据在整个AppDomain中保留给所有用户。

接下来我想到了使用HttpContext.Current。但是,如果您在用户注销时将内容放在此处,那么当他们登录时,您的缓存数据将会过时。我每次登录/退出时都可以更新这个,但我不知道这是否正确。在没有其他想法的情况下,这就是我倾向于的地方。

什么是准确缓存用户详细信息并避免大量数据库调用的轻量级方法?

3 个答案:

答案 0 :(得分:5)

如果您想要缓存的信息是按用户进行的,并且仅在它们处于活动状态时,那么Session就是正确的位置 http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.aspx

答案 1 :(得分:2)

您正在寻找的是System.Web.Caching.Cache

http://msdn.microsoft.com/en-us/library/system.web.caching.cache.aspx

答案 2 :(得分:2)

ASP.NET会话状态管理适用于某些情况,但是当负载过重时,它往往会在ASP.NET性能方面造成瓶颈。在这里阅读更多相关信息:

http://msdn.microsoft.com/en-us/magazine/dd942840.aspx

http://esj.com/articles/2009/03/17/optimize-scalability-asp-net.aspx

避免瓶颈的解决方案是使用分布式缓存。市场上有许多免费的分布式缓存解决方案,如Memcached或NCache Express。

不太了解Memcached,但我使用了Alachisoft的NCache Express,它允许您使用ASP.NET缓存而无需更改任何代码。