【发布时间】:2019-12-15 08:16:11
【问题描述】:
我想创建一些应该是短暂的通知,大约 1 天。这样,如果用户今天访问所有通知,我就可以发送这些通知,但明天不行。
假设有人正在创建一些帖子,我想在帖子上传成功时向他们发送通知。但该通知明天就无关紧要了,而且会造成不必要的混乱。
我考虑过在进程中使用Sidekiq,在after_commit 挂钩中,触发sidekiq 作业在18 hrs 之后运行,类似于:
after_commit :trigger_destroyer
private
def trigger_destroyer
if notification_type == 'shortlived'
NotificationDestroyer.perform_in(3.hours.from_now, id)
end
end
或者我可以运行一个读取 created_at 和通知类型的 cron 作业并在那里删除它们。
有没有更好的方法?
【问题讨论】:
-
我不确定您是否清楚地解释了您要解决的问题。您是否尝试过白板您的用户故事?是否有不止一种类型的动作会触发通知?有很多方法可以解决一个问题。但在明确定义用户故事之前,不能推荐任何一种。
-
首先想到的是使用 Redis,它可以让您设置数据的到期时间。但是,如果您想将其保留在 SQL 中,则必须询问是否真的有必要在数据库中的所有记录到期时删除它们,或者您的“通知发送者作业”(假设您有一个)是否可以忽略旧的通过比较时间戳记录
-
@lacostenycoder 是的,应该有
n类型的通知。比如comment、like、follow等等。 -
@maxpleaner 我确实尝试过使用
Redis,但是,数据应该有多个关联,这一切都让它太乱而无法处理。您建议的第二种方法似乎可行,但是,它只会不断增加表行。但是,该选项也是最不混乱的选项。
标签: ruby-on-rails ruby postgresql activerecord