gpt4 book ai didi

c# - 每天运行任务来计算产品浏览量(没有 cronjob)

转载 作者:行者123 更新时间:2023-11-30 22:21:23 25 4
gpt4 key购买 nike

我想每天、每周和所有时间创建一个计数器。我数据库中的每个产品都有一个每周、每天和 all_time 计数器。我的目标是能够模仿一个 cronjob。我想听听这样做是否正确。

假设我只定位每日计数器。在我的产品表中的数据库中,我将有一行名为 'daily_counter'。对于每个产品,它将被初始化为零。另一个表将只有一个名为 'for_Day' 的行,该行包含每日计数器适用的那一天。

我还将初始化一个与具有一行的表对应的应用程序变量,并将“for_day”中的值读取到 Application["for_day"] 变量中。这只会在应用程序首次启动时发生。

对于每个用户的产品页面的每个 View ,我将执行以下操作(使用 C#)

获取当前天数

Int current_day = DateTime.Now.Day;

将当前日期与应用程序 ["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)后面运行。

谢谢

最佳答案

出于多种原因,这是一个坏主意:

  • 当应用程序因为没有人访问它而卸载时,所有应用程序变量值都会丢失(我认为默认的应用程序回收时间是 20 分钟)。
  • 当多个线程尝试运行此代码时,您将不得不处理竞争条件。
  • 您将如何确保同一用户不会多次增加相同的产品数量?

this thread 中有几个好主意:

  • 每次点击都会将商店浏览量直接计入数据库。
  • 使用每日 cookie 或特定日期的资源 url 来防止同一用户多次点击(这可以规避,但 99.9% 的用户不会尝试)- 作为附带好处,这是客户端,所以如果用户已经访问过某个产品,它甚至不必引起另一个数据库命中。

关于c# - 每天运行任务来计算产品浏览量(没有 cronjob),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14409722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com