[英]Reduce the number of database calls in a MVC website
我有一个复杂的C#MVC 4网站,可以连接到多个数据库。 每个请求都经过以下步骤
除了上述步骤之外,我们还具有各种操作筛选器,用于查询数据库并检查角色等。这些操作筛选器必须执行步骤1,2、3和4才能获取用户信息。 我现在发现该应用程序由于需要执行的查询数量而运行缓慢。 通过在会话中缓存连接字符串和用户详细信息,我可以大大加快速度。
我们将很快将网站移至服务器场,并且我不想依赖会话进行缓存。 我还有其他明显的设计选择要忽略吗?还是必须继续以memcached形式使用缓存或在整个服务器场中均可使用的某些解决方案?
编辑:我应该提到数据库和网站位于不同的服务器上,有时必须根据客户端的位置通过WAN进行数据库调用。 我已经测量了性能,并且知道数据库调用是性能下降的原因。
您是否考虑过将客户端ID存储在身份验证Cookie中,然后保留[ClientId-> ConnectionString]的服务器端缓存?
您可以在第一步之后生成并验证Cookie,然后将数据保存在会话或cookie中。之后,您可以使用先前存储的cookie /会话中的数据,并跳过步骤1。
您可以尝试集群索引以更快地获取数据
您可以在此处尝试使用HttpCookie
和AuthenticationCookie
来维护将在视图和控制器之间访问的冗余数据的状态。 我想说的一个简单示例是维护已登录用户的userId和userName的状态。这可以用作参考:
private void SetCookie(string userName, long userId)
{
string IdUser = Common.Encrypt(userId.ToString());
FormsAuthentication.SetAuthCookie(userName, false);
HttpCookie uCookie = new HttpCookie("UserId", IdUser);
Response.Cookies.Add(uCookie);
}
这只是一个示例代码,显示了如何生成Cookie。 在cookie中设置信息之后,您无需在每次需要该ID或姓名或电话号码或其他任何信息时都访问数据库。 您只需要从创建的cookie中检索该信息。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.