首页 > 解决方案 > 回送/快速标记项目以在一段时间后删除

问题描述

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

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

1)使用setTimeout我可以调用一个函数来标记要删除的项目。该解决方案根本无法扩展,因为它不是stateless,如果有多个node运行实例,这将导致问题。

2)使用redis数据库并为每个项目创建一个redis带有过期时间的键。redis计时器到期时会自动调用一个函数,然后我可以删除该项目。我认为这是可扩展的stateless

有没有更有效的解决方案?

编辑

我还想在商品过期后立即通知用户。因此,我需要在到期后立即进行函数调用。因此,设置 expireAt 键并每隔一段时间运行一个清理实用程序,在这里不会有太大帮助。

标签: node.jsexpressloopbackjsloopback

解决方案


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

如果有一个使用 Redis 的 Express 实例不会改变可扩展性和持久性,除非您启用 Redis 持久性以在重新启动/重启后继续存在,或者除非您使用多个 Redis 节点。

如果有多个 Express 实例使用 Redis 是可行的方法。


推荐阅读