【发布时间】:2019-08-23 04:40:04
【问题描述】:
所以我有一个用户数据库,其中有一个 reminderTime 字段,当前只是一个字符串,看起来像 07:00,这是一个 UTC 时间。
将来我将在reminderTime 中包含多个字符串,这将对应于用户应该收到通知的时间。
假设您登录了一个应用程序,设置多个提醒,例如07:00、15:00、23:30,并将其发送到服务器。服务器会将这些保存在数据库中并运行任务并在07:00 然后在15:00 发送通知,依此类推。所以后来用户决定他将不再希望在15:00 接收通知或将其更改为15:30,我们应该适应这种情况。
每个用户都有一个时区,但我想因为 reminderTime 已经在 UTC 我可以创建一个任务而不看时区。
目前我有一个reminderTime 作为number,在客户给我发送一个07:00 后,我将其转换为秒,但据我所知,我可以更改它并坚持使用string。
我的所有任务都使用Bull 队列库和Redis 运行。因此,据我了解,最好的可扩展方法是采用reminderTime 并在给定时间为每天创建通知并运行任务,唯一的问题是我应该将它们保存到我的数据库中还是将任务添加到队列中在Bull。多次相同。
我不明白我应该如何更改Bull 中已经创建的任务,以便时间不同等等。
也许我可以创建 1000 条记录,此时用户应该在我的数据库中收到通知。然后我创建了一个可重复的作业,它将每隔 5 分钟运行一次,并获取所有应该在接下来的几个小时内发送的通知,然后将它们添加到 Bull 队列并标记它已发送。
所以基本上你明白了,也许它可以做得更好一点。
【问题讨论】:
标签: node.js redis scheduled-tasks