我想创建一个计数器,每天,每周和所有时间。我数据库中的每个产品都会有一个每周、每天和 all_time 计数器。我的目标是能够模仿 cronjob。我想知道这是否是正确的做法。
假设我将只针对每日计数器。在我的产品表中的数据库中,我将有一行名为'daily_counter'。对于每个产品,它将被初始化为零。另一个表将只有一行被调用'for_Day'
,该行包含每日计数器适用的那一天。
我还将用一行初始化与表对应的应用程序变量,并将“for_day”中的值读取到Application["for_day"]
变量中。这只会在应用程序第一次启动时发生。
对于每个用户的产品页面的每个视图,我将执行以下操作(使用 C#)
获取当前日期编号
Int current_day = DateTime.Now.Day;
将当前日期与 Application["for_day"] 中的内容进行比较
if(current_day == Application["for_day"]){ // same day from last counter reset
// do nothing
}
如果它们相等,则什么也不做。
else if(current_day > Application["for_day"]){ // new day
1. Reset the daily counter in the database to zero
2. Application["for_day"] = current_day;
3. Update the column for_day in the database to current_day
}
我对访问我网站的每个用户进行此项检查。这应该每天只运行一次,并将数据库中的每日计数器重置为 0,以便前几天访问该站点的第一个用户。即使第一个用户在两天后出现,它仍然应该可以正常工作,因为它会相应地更新数据,并且所有用户都会看到当天的新计数器。
我认为这比 cronjob 更可取,我只在 application_Start 查询数据库,并且每天最多查询一次。在负载均衡器的多台服务器上启动我的 Web 应用程序时,我的解决方案应该可以工作。因为数据库位于远程位置并且不会在每台服务器上抵抗,所以我认为这应该可以正常工作。
我想听听你对这项技术的看法,它是否会像我预期的那样工作,以及是否有办法改进它。我更喜欢这个,因为我不依赖外部 cronjob 服务/服务器,一切都在我的应用程序中。
我正在用 ASP.NET 和 C# 开发我的应用程序,并将其安装在 Windows 2008 服务器上,它将在负载均衡器后面运行,可能是 Amazon AWS ElasticBeans。
谢谢