gpt4 book ai didi

node.js 使用 Redis 使用 ttl 创建作业

转载 作者:可可西里 更新时间:2023-11-01 11:14:56 24 4
gpt4 key购买 nike

我需要在这种情况下设计一个 node.js 应用程序:

  1. 用户使用具有唯一 token cookie 的 cookie 请求/page>
  2. Node.js 在 Redis(?) 上使用此 token 创建一个 记录,TTL 为 5 分钟。 tokens 有 n 类型。所以 redis(?) 应该存储带有类型的 token 。
  3. 如果用户在 record 到期之前再次回来,record 的 TTL 将再次重置为 5 分钟。
  4. 如果用户没有再次回来并且 record 过期,将触发一个函数。
  5. 最后,我需要属于特定类型(即类型 27)的 record 的计数。

解决这个问题的最佳方法是什么? Redis 是正确的选择吗?如果使用redis,如何统计token并触发第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)的计数,这似乎并不像上面链接中描述的那样有效。

即使https://redis.io/topics/notifications解决了上面列表中第 4 项的问题,我还询问“我应该使用哪种模式/算法以及如何使用”。我不想让你为我编码,但只需要一点 Spark 。教程、指南、视频等。会很棒。谢谢!

最佳答案

你有很多选择来实现你想要的,但我会在这里提供一个,这是一个在检索速度方面非常有效的方法,但它需要更多的空间。显然,这完全取决于您的用例。

假设 token 是12345,类型是A

添加 token 时(我们将通过交易来完成):

MULTI
SETEX tokens:12345 300 ""
SET type:12345 "A"
INCR types:A
EXEC

当 key 过期时(300 秒后,或者每当 Redis 认为它​​已过期时)我们会使用 key 空间通知 ( 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 的优势之一是它的灵 active 。

关于node.js 使用 Redis 使用 ttl 创建作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52841976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com