【发布时间】:2014-02-11 19:03:21
【问题描述】:
我们目前在 Heroku 托管的 Python 应用程序中使用 Redis to Go。
我们使用 Redis 和 python-rq 纯粹作为一个任务队列来提供一些时间密集型任务的延迟执行。一个任务正在从 PostgreSQL 数据库中检索一些数据并将结果写回它 - 因此 Redis 实例中根本没有保存任何有价值的数据。我们注意到,根据执行的作业数量,Redis 正在消耗越来越多的内存(增长 @ ~10 MB/小时)。 CLI 上的 FLUSHDB 命令修复了这个问题(将其降低到使用的 RAM 约为 700kB),直到 RAM 再次满为止。
根据我们(未更改的标准)设置,作业结果会保留 500 秒。随着时间的推移,一些作业当然会失败,它们会被移动到失败的队列中。
- 为了在稳定的 RAM 容量下完成任务,我们必须采取哪些不同的措施?
- RAM 消耗从何而来?
- 我可以完全关闭持久性吗?
- 从文档中我知道 500 秒 TTL 意味着密钥“过期”,但并未真正删除。此时密钥是否仍会消耗内存?我能以某种方式改变这种行为吗?
- 它是否与失败的队列有关(显然没有附加到作业的 TTL,这意味着(我认为)这些将永远保留)?
- 只是好奇:当纯粹将RQ用作队列时,Redis DB中保存了什么?它是实际的可执行代码还是只是对要执行的函数的位置的引用?
很抱歉,我提出了一些非常愚蠢的问题,但我对排队的话题很陌生,经过 2 天以上的研究,我已经到了不知道下一步该做什么的地步。 谢谢, KH
【问题讨论】:
标签: python heroku asynchronous redis redistogo