循环/表达标记项,在一段时间后删除

问题描述 投票:0回答:1

我有一个存储用户项目的模型Item。该模型具有字段endDate,在该字段中必须通过将expired字段设置为true来将实例标记为删除。有什么方法可以自动在环回/表达中做到这一点?我正在使用postgresql作为数据库。

我可以想到以下两种方法,但我认为它们不是解决此问题的最佳方法:

1]使用setTimeout,我可以调用一个将要标记为要删除的项目的函数。此解决方案根本无法扩展,因为它不是stateless,并且如果正在运行node的多个实例,则可能会引起问题。

2)使用redis数据库,并为每个项目在redis中创建一个具有到期时间的密钥。计时器到期时,redis将自动调用一个函数,然后我可以删除该项目。我认为这是可伸缩的,因为它是stateless

是否有更有效的解决方案?

编辑

我想在商品过期后立即通知用户。因此,我需要在到期后立即进行函数调用。因此,设置expireAt key并定期运行清理实用程序在这里没有太大帮助。

node.js express loopbackjs loopback
1个回答
0
投票

setTimeout是可伸缩的,只要遵循可伸缩性/性能advise。这里的问题是setTimeout方法不是持久的,例如如果托管Express的服务器/容器重新启动,则某些用户的功能将被破坏。另一个问题是,如果您有多个Express实例,它将不起作用。

如果有一个使用Redis的Express实例,则不会更改可伸缩性或持久性,除非您启用Redis持久性以承受重新启动/重新引导或除非您使用多个Redis节点。

如果有多个使用Redis的Express实例,这是要走的路。

© www.soinside.com 2019 - 2024. All rights reserved.