В настоящее время мы используем Redis для Go с нашим приложением Python, размещенным на Heroku.
Мы используем Redis с python-rq только как очередь задач, чтобы обеспечить отсроченное выполнение некоторых напряженных задач. Задача - получить некоторые данные из базы данных PostgreSQL и вернуть к ней результаты - таким образом, никакие ценные данные вообще не сохраняются в экземпляре Redis. Мы замечаем, что в зависимости от количества выполненных заданий Redis потребляет все больше и больше памяти (рост @~ 10 МБ/час). Команда FLUSHDB в CLI исправляет это (переносит ее до ~ 700 КБ используемой ОЗУ) до тех пор, пока ОЗУ не будет полностью заполнено.
В соответствии с нашими (неизменными стандартными) настройками результат работы сохраняется в течение 500 секунд. Со временем некоторые задания, конечно, терпят неудачу, и они перемещаются в неудачную очередь.
- Что нам нужно делать по-другому, чтобы наши задачи выполнялись со стабильным объемом оперативной памяти?
- Откуда идет потребление ОЗУ?
- Можно ли вообще отключить постоянство?
- Из документов, которые я знаю, что 500-секундный TTL означает, что ключ затем "истек", но не действительно удален. В этот момент ключ все еще потребляет память? Могу ли я каким-то образом изменить это поведение?
- Имеет ли он какое-то отношение к неудавшейся очереди (которая, по-видимому, не имеет TTL, прикрепленного к заданиям, что означает (я думаю), что они сохраняются навсегда)?
- Просто любопытно: при использовании RQ чисто в качестве очереди, что сохраняется в Redis DB? Это фактический исполняемый код или просто ссылка на то, где можно найти функцию, которая будет выполнена?
Извините за довольно noobish вопросы, но я новичок в теме работы в очереди и после исследования в течение 2+ дней я достиг точки, где я не знаю, что делать дальше. Благодаря, KH