我有一个复杂的C#MVC 4网站,可以连接到多个数据库。每个请求都要经过以下步骤
除了上述步骤之外,我们还有各种动作过滤器来查询数据库并检查角色等。这些动作过滤器必须执行步骤1,2,3和4来获取用户信息。我现在发现应用程序运行缓慢,因为它需要执行的查询数量。通过缓存会话中的连接字符串和用户详细信息,我可以大大加快速度。
我们很快就会将网站迁移到服务器场,我不想依赖会话进行缓存。是否有任何其他明显的设计选择,我忽略或我必须继续使用memcached或某种服务器场的解决方案形式的缓存?
修改 我应该提到数据库和网站在不同的服务器上,有时数据库调用必须通过WAN进行,具体取决于客户端的位置。我已经测量了性能,并且知道数据库调用是性能不佳的原因。
答案 0 :(得分:0)
您是否考虑将客户端ID存储在身份验证Cookie中,然后保留[ClientId - >的服务器端缓存。 ConnectionString]?
答案 1 :(得分:0)
您可以在第一步后生成和验证Cookie并将数据保存在会话或cookie中。您可以使用先前存储的cookie /会话中的数据并跳过步骤1.
您可以尝试使用群集索引来更快地获取数据
答案 2 :(得分:0)
您可以尝试在此使用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中检索该信息即可。
希望这有帮助。