node.js - 回送/快速标记项目以在一段时间后删除
问题描述
我有一个Item
存储用户项目的模型。该模型有一个字段,必须通过将字段设置为 trueendDate
将实例标记为删除。expired
有什么方法可以自动在环回/快递中做到这一点?我正在postgresql
用作数据库。
我可以想到以下两种方法,但我认为它们不是解决此问题的最佳方法:
1)使用setTimeout
我可以调用一个函数来标记要删除的项目。该解决方案根本无法扩展,因为它不是stateless
,如果有多个node
运行实例,这将导致问题。
2)使用redis
数据库并为每个项目创建一个redis
带有过期时间的键。redis
计时器到期时会自动调用一个函数,然后我可以删除该项目。我认为这是可扩展的stateless
。
有没有更有效的解决方案?
编辑
我还想在商品过期后立即通知用户。因此,我需要在到期后立即进行函数调用。因此,设置 expireAt 键并每隔一段时间运行一个清理实用程序,在这里不会有太大帮助。
解决方案
setTimeout
如果遵循可扩展性/性能建议,则可扩展。这里的问题是这种setTimeout
方法不持久,例如,如果托管 Express 的服务器/容器重新启动,某些用户的功能将被破坏。另一个问题是,如果您有多个 Express 实例,它将无法工作。
如果有一个使用 Redis 的 Express 实例不会改变可扩展性和持久性,除非您启用 Redis 持久性以在重新启动/重启后继续存在,或者除非您使用多个 Redis 节点。
如果有多个 Express 实例使用 Redis 是可行的方法。
推荐阅读
- javascript - 反应我如何重定向主页?
- openpyxl - 如何遍历 Excel 文件和 ID 彩色单元格值
- html - 悬停时按钮不改变颜色
- cpu-architecture - 空间局部性未命中数
- xcode - Xcode 12.5 部署:上传到 App Store 时出错
- python - Pip install 与软件包的开发版本不匹配
- javascript - 使用导入模块的命名别名不适用于导出名称的点表示法?
- jquery - 如何更改 window.open() (wordpress) 的大小?
- python - Python 不创建 .txt 文件
- mysql - 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法