用户登录我们的网站时,我们需要检查一些事情:
现在,这是一个相当愚蠢的实现。首先,在每一页上都要检查所有这些内容。相当昂贵,所以现在仅在关键页面上。多次访问数据库等...
在分析中,我发现这里花费的时间最多。所以我想加快速度。到目前为止,我看到了两种选择:
向用户表添加几列,即LastCheckedOpenTasksTimeStamp
和LastOpenTask
和ForceReCheck
。缺点:只要应用程序中发生与此类任务相关的任何事情(例如付款),我们都必须设置ForceReCheck
或其他一些无效机制。对我来说似乎容易出错。
某种数据库视图,用于计算需要完成的工作。但这对于本质上是业务逻辑的东西来说是非常低的水平。
我确定必须有一种我看不到的更好的方法。有什么更好的替代方法?
答案 0 :(得分:0)
使用会话。
人员登录,您一次访问数据库并设置:
Session["emailVerified"] = checkEmailVerified();
Session["licenseType"] = getLicenseType();
Session["expirationDate"] = getSubExpDate();
// etc.
然后,当此人执行任何操作时,您可以引用该会话,而不必进行多次数据库访问。
如果任何会话变量未评估您希望它们的方式,您可以返回数据库。
我特别不打算使用Cache,因为对于每个登录的用户,您的数据都与用户相关。更详尽的解释here,但最重要的一点是:
会话和缓存之间的第一个主要区别是: 基于每个用户,但缓存不是基于每个用户的,那该怎么办 意思?会话数据存储在用户级别,但缓存数据 存储在应用程序级别并由所有用户共享。
答案 1 :(得分:0)
您可以将缓存用于此类信息。 您从数据库中检索了它,并且一旦更新了它们的任何字段,该缓存就会失效。
要检索的逻辑(将查看缓存变量是否为空)将重新计算。
在这里您可以看到几种方法,具体取决于您希望它具有什么样的健壮性或可扩展性:How to cache data in a MVC application