我有一个应用程序使用Bull作为队列。是否有一个参数,我可以传递它来为每个条目在创建时自动设置一个TTL (生存时间)?
const Queue = require('bull')
const webApiQueue = new Queue('webApi', {redis: REDIS_URL })
// Producer
const webApiProducer = (data) => {
webApiQueue.add(data, { lifo: true })
}
如果直接使用Redis设置密钥,则使用setex key_name 10000 key_data。
但我怎样才能在公牛中实现这样的目标呢?它只是一个API处理队列,我希望它在24小时后自动删除条目。
我在文档中没有看到任何东西:https://github.com/OptimalBits/bull#documentation
发布于 2022-04-01 01:20:29
据我所知,在Redis键上显式设置TTL (例如24小时)并不是解决这个问题的推荐方法。
似乎规范的方法是只在必要时清除键(例如,当内存耗尽时)。
这份公牛报给我指明了正确的方向。
如果希望更多地管理Bull的内存,那么请合理地尝试将removeOnComplete
和removeOnFail
指定为在文件中讨论 (请注意,两者都默认为false
)。
另一种完全不同的方法是通过将maxmemory-policy
设置为allkeys-lru
来解决Redis配置中的内存管理问题,就像在Redis文档中讨论的那样。
如果您使用的是AWS ElastiCache,那么在这些技术上使用Amazon有一些文档。默认情况下将导致Bull内存问题,因为Bull不设置TTL。我建议将其更改为allkeys-lru
。
就其价值而言,我的猜测是,最具表现力的解决方案是在Redis/ maxmemory-policy
guess配置中修改。这样,Redis本身就是在管理键,而不是Bull为已完成/失败的作业删除增加开销。
https://stackoverflow.com/questions/70191626
复制相似问题