SimpleMembership查询性能

用户名

我创建了一个ASP.NET MVC 4 Internet应用程序项目。该项目使用SimpleMembership。要注册一个帐户,它需要运行9个查询。这似乎很正常,因为这是该项目随附的标准代码,但是仅注册一个帐户不是9个查询吗?

我还注意到,当我使用:

if (Roles.IsUserInRole("..."))

它运行4个查询...

这是正常现象吗,这会成为性能问题吗?

无艺术感

这是正常的。但是,当您的网站扩展时,这可能是性能问题。

权限不会发生太大变化,即使在用户的整个生命周期中也是如此。您的绝大多数用户都将设置默认权限,只有(相对)少数用户将具有“管理员”或“主持人”之类的角色。当您的站点变大时,查询数据库的权限变得非常昂贵,尤其是因为您要一遍又一遍地查询相同的数据。每次渲染页面时,您都可能会检查一些权限。用户是否有权查看“删除”按钮?他可以看到一些管理菜单吗?如果是论坛或博客文章,他可以看到发布者的IP地址吗?这种事情要求您在每个页面呈现中多次检查权限,而您确实不想通过数据库查询来进行权限检查。

正确的解决方案是缓存权限。请考虑以下问题:
用户登录时,您查询其拥有的所有权限,并将其缓存在Web服务器的内存中。如果您有多个Web服务器,则需要同步它们的缓存,或者如果该特定服务器没有该用户的内存,则需要让每个服务器查询用户的权限。当用户向该服务器发出请求时,这将按需发生。
现在,您根本不需要查询数据库。所有权限检查都在内存中完成,这将更快地工作,并且无需理会数据库。当然,如果更改用户的权限,则将需要同步所有Web服务器缓存,但是由于这种情况很少发生,因此不会对性能造成任何影响。

您将需要在某个时候清除缓存,因为服务器有多少内存是有限制的。在此阶段,您可以为上次活动的用户删除缓存的权限,这些用户可能不再浏览您的网站。即使他们仍然在那里,他们的权限也会在下一个查询中重新加载。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章