Ben*_* CA 1 ttl redis node.js bull
我有一个使用 Bull 进行队列的应用程序。是否有一个参数可以传递给它,以便在创建每个条目时自动为其设置 TTL(生存时间)?
const Queue = require('bull')
const webApiQueue = new Queue('webApi', {redis: REDIS_URL })
// Producer
const webApiProducer = (data) => {
webApiQueue.add(data, { lifo: true })
}
Run Code Online (Sandbox Code Playgroud)
如果直接使用 Redis 设置密钥,则可以使用setex key_name 10000 key_data
但是我怎样才能在 Bull 中实现这样的功能呢?它只是一个 API 处理队列,我希望它在 24 小时后自动删除条目。
我在文档中没有看到任何内容: https ://github.com/OptimalBits/bull#documentation
据我所知,在 Redis 键上显式设置 TTL(例如 24 小时)似乎并不是解决此问题的推荐方法。
规范的方法似乎是仅在必要时(例如,当我们耗尽内存时)才清除键。
这个牛市问题为我指明了正确的方向。
如果您想让 Bull 更好地管理其内存,咳咳,合理地,请尝试指定removeOnComplete和 ,removeOnFail如文档中讨论的那样(请注意,两者都默认为false)。
一种完全不同的方法是通过设置Redis 文档中讨论的maxmemory-policyto来解决 Redis 配置的内存管理问题。allkeys-lru
如果您使用 AWS ElastiCache,Amazon 有一些关于这些相同技术的文档。ElastiCache默认使用maxmemory-policyofvolatile-lfu,这会导致 Bull 出现内存问题,因为 Bull 不设置 TTL。我建议将其更改为allkeys-lru.
就其价值而言,我的猜测是,最高效的解决方案是修改maxmemory-policyRedis/ElastiCache 配置。这样,Redis 本身就可以管理密钥,而不是 Bull 为已完成/失败的作业删除增加开销。