node.js 使用 Redis 使用 ttl 创建作业
node.js creating jobs with ttl using redis
我需要在这种情况下设计一个 node.js 应用程序:
- 用户使用具有唯一
token
的 cookie 请求 /page
- Node.js 在 redis(?) 上使用此令牌创建一个
record
,TTL 为 5 分钟。 token
s 有 n
类型。所以 redis(?) 应该存储带有类型的标记。
- 如果用户在
record
到期之前再次回来,record
的 TTL 将再次重置为 5 分钟。
- 如果用户不再回来并且
record
过期,将触发一个函数。
- 最后,我也需要
record
s的计数属于特定类型(即类型27)。
解决这个问题的最佳方法是什么? Redis 是正确的选择吗?如果使用redis,如何计算token
s并触发第5步?
使用 https://github.com/Automattic/kue 或类似的东西是不错的选择吗?
编辑:
似乎可能与 Event on key expire 重复
.总的来说,请问redis适不适合这个问题?如果您认为是,能否请您举一个我应该遵循的示例模式。如果没有,还有什么其他解决方案甚至可能没有 redis 或第 3 方工具。
此外,正如我在上面列表中的第 5 项中所说,redis 似乎不适合使用此处描述的模式查询 keys
:https://redis.io/commands/keys
.因为似乎没有办法让集合 (TTL for a set member) 的单个成员过期,所以我无法将令牌放入 type
集合或散列中。因此,我需要查询键以获得组的计数 (type
),这似乎并不像上面 link 中描述的那样有效。
即使 https://redis.io/topics/notifications 解决了上面列表中第 4 项的问题,我也要求 "Which pattern/algorithm should I go and how" 。我不想让你为我编码,但只需要一点火花。教程、指南、视频等。会很棒。谢谢!
你有很多选择来实现你想要的,但我将在这里提供一个,就检索速度而言,这是一个非常有效的选择,但它需要更多 space。显然,这完全取决于您的用例。
假设令牌是12345,类型是A
添加令牌时(我们将通过交易来完成):
MULTI
SETEX tokens:12345 300 ""
SET type:12345 "A"
INCR types:A
EXEC
当密钥过期时(300 秒后,或者每当 Redis 认为它已过期时)我们会使用密钥space 通知(https://redis.io/topics/notifications)收到通知,监听 EXPIRED 事件:
PSUBSCRIBE __keyspace@0__:expired
当该订阅收到一条消息时,您需要在您的代码中:
MULTI
GET type:12345 # Returns A
DEL type:12345
DECR types:A
EXEC
为了获取特定类型的元素:
GET types:A
任何 NodeJS Redis 客户端都可以正常工作。
我想澄清一下,这只是您拥有的多个选项之一; Redis 的优势之一是它的灵活性。
我需要在这种情况下设计一个 node.js 应用程序:
- 用户使用具有唯一
token
的 cookie 请求 /page
- Node.js 在 redis(?) 上使用此令牌创建一个
record
,TTL 为 5 分钟。token
s 有n
类型。所以 redis(?) 应该存储带有类型的标记。 - 如果用户在
record
到期之前再次回来,record
的 TTL 将再次重置为 5 分钟。 - 如果用户不再回来并且
record
过期,将触发一个函数。 - 最后,我也需要
record
s的计数属于特定类型(即类型27)。
解决这个问题的最佳方法是什么? Redis 是正确的选择吗?如果使用redis,如何计算token
s并触发第5步?
使用 https://github.com/Automattic/kue 或类似的东西是不错的选择吗?
编辑: 似乎可能与 Event on key expire 重复 .总的来说,请问redis适不适合这个问题?如果您认为是,能否请您举一个我应该遵循的示例模式。如果没有,还有什么其他解决方案甚至可能没有 redis 或第 3 方工具。
此外,正如我在上面列表中的第 5 项中所说,redis 似乎不适合使用此处描述的模式查询 keys
:https://redis.io/commands/keys
.因为似乎没有办法让集合 (TTL for a set member) 的单个成员过期,所以我无法将令牌放入 type
集合或散列中。因此,我需要查询键以获得组的计数 (type
),这似乎并不像上面 link 中描述的那样有效。
即使 https://redis.io/topics/notifications 解决了上面列表中第 4 项的问题,我也要求 "Which pattern/algorithm should I go and how" 。我不想让你为我编码,但只需要一点火花。教程、指南、视频等。会很棒。谢谢!
你有很多选择来实现你想要的,但我将在这里提供一个,就检索速度而言,这是一个非常有效的选择,但它需要更多 space。显然,这完全取决于您的用例。
假设令牌是12345,类型是A
添加令牌时(我们将通过交易来完成):
MULTI
SETEX tokens:12345 300 ""
SET type:12345 "A"
INCR types:A
EXEC
当密钥过期时(300 秒后,或者每当 Redis 认为它已过期时)我们会使用密钥space 通知(https://redis.io/topics/notifications)收到通知,监听 EXPIRED 事件:
PSUBSCRIBE __keyspace@0__:expired
当该订阅收到一条消息时,您需要在您的代码中:
MULTI
GET type:12345 # Returns A
DEL type:12345
DECR types:A
EXEC
为了获取特定类型的元素:
GET types:A
任何 NodeJS Redis 客户端都可以正常工作。
我想澄清一下,这只是您拥有的多个选项之一; Redis 的优势之一是它的灵活性。