EXPIRE и TTL
Тема дорожной карты · Redis
EXPIRE key seconds устанавливает таймаут на ключ Redis, вызывая его автоматическое удаление по истечении указанного числа секунд. Команда TTL key возвращает оставшееся время жизни в секундах, -1 если у ключа нет срока действия, или -2 если ключ не существует. Для более точной настройки времени в миллисекундах используются команды PEXPIRE key milliseconds и PTTL key. Эти механизмы позволяют эффективно управлять жизненным циклом данных и предотвращать необоснованный рост памяти.
Эти команды играют ключевую роль в управлении кэшем Redis, обеспечивая автоматическое удаление устаревших данных и предотвращая неограниченный рост памяти. Они являются важным инструментом для поддержания чистоты и актуальности данных в кэше.
Как это работает
EXPIRE и TTL — это простые, но мощные механизмы управления временем жизни ключей в Redis. Команда EXPIRE позволяет установить таймаут для ключа, после которого ключ будет автоматически удален. Команда TTL позволяет получить оставшееся время жизни ключа. Эти механизмы используются для управления данными в кэше, обеспечивая автоматическое удаление устаревших данных.
Redis использует комбинацию ленивого истечения срока действия (проверка TTL при обращении) и периодического активного истечения (выборка случайных ключей) для освобождения памяти от устаревших ключей. Это позволяет эффективно управлять жизненным циклом данных и предотвращать необоснованный рост памяти.
Когда применять
Команды EXPIRE и TTL особенно полезны при работе с данными, которые имеют ограниченный срок действия. Например, кеш JSON-ответов, атомарные счётчики (например, INCR page_views:2026-05-15), простые флаги функций, сессионные идентификаторы и бакеты для ограничения скорости запросов.
Команда SET ... EX ... NX позволяет установить значение ключа с заданием временного ограничения, если ключа еще не существует. Это полезно для создания безопасных односессионных блокировок. Команды SETBIT и GETBIT позволяют использовать битовые карты для управления флагами функций и подсчета уникальных значений.
Типичные ошибки
Хранение больших JSON-блобов в Redis-строках может привести к увеличению сетевого трафика и потребления памяти. Вместо этого рекомендуется хранить идентификаторы и использовать отдельные ключи для поиска данных.
Установка временных ограничений (TTL) с использованием случайных значений может привести к нерегулярному удалению данных. Лучше использовать постоянные значения для TTL, чтобы обеспечить стабильное управление временем жизни данных.
Использование команды SETNX для блокировок в Redis Cluster может привести к нестабильной работе. Вместо этого рекомендуется использовать более надежные методы блокировок, такие как Redlock или использование сингл-мастер конфигурации.
Многократное использование команды APPEND для добавления данных к большой строке может привести к увеличению потребления памяти. Вместо этого рекомендуется использовать другие команды, которые позволяют эффективно управлять данными.