Автор: жаокк
В современной разработке программного обеспечения решающее значение имеют производительность и хранение данных. Чтобы обеспечить быстрый доступ к данным и их хранение в среде с высоким уровнем параллелизма, мы часто используем технологию кэширования. Redis (Remote Dictionary Server) как высокопроизводительная база данных хранения значений ключей широко используется в различных сценариях приложений. В процессе использования Redis мы часто сталкиваемся с истечением срока действия данных. Итак, когда срок действия ключа в Redis истечет, он будет немедленно удален? В этой статье мы углубимся в стратегию истечения срока действия Redis и поможем вам понять механизм, лежащий в ее основе.
Политика истечения срока действия Redis — это механизм автоматического удаления данных с истекшим сроком действия. При использовании Redis для хранения данных мы можем установить срок действия (TTL, Time To Live) для каждого ключа. Как только время истечения срока действия установлено, Redis автоматически удалит ключ по истечении срока его действия, чтобы освободить место в памяти. Однако следует отметить, что Redis не гарантирует, что Ключ будет удален сразу после истечения срока его действия. Фактически, Redis использует стратегию ленивого удаления для управления данными с истекшим сроком действия.
RedisСтратегия экспирации в основном включает в себя два метода:Ленивое истечение срока действияи Периодическое удаление (активный срок действия)。
Отложенное удаление означает, что когда вы пытаетесь получить доступ к ключу с истекшим сроком действия, Redis сначала проверит, истек ли срок действия ключа, удалит его, если срок его действия истек, и вернет данные, если срок его действия еще не истек. Это означает, что ключи с истекшим сроком действия будут удалены только при доступе, а не сразу. Такая стратегия в определенной степени снижает накладные расходы на операции удаления и повышает производительность операций чтения.
Помимо отложенного удаления, Redis также очищает просроченные данные посредством регулярного удаления. Redis будет случайным образом выбирать часть данных с истекшим сроком действия каждый период времени (по умолчанию — 100 мс), а затем удалять данные с истекшим сроком действия. Таким образом, даже если к некоторым ключам нет доступа, их можно очистить при обычном удалении.
Чтобы лучше понять стратегию истечения срока действия Redis, давайте продемонстрируем ее на простом примере.
import redis
import time
# Подключиться к серверу Redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)
# Установите срок действия ключа на 5 секунд.
r.set('my_key', 'Hello, Redis!', ex=5)
# Получить значение ключа
value = r.get('my_key')
print(f"Значение ключа: {value}")
# Подождите 6 секунд, пока срок действия ключа истечет.
time.sleep(6)
# Попробуйте еще раз значение ключа
value_after_expiry = r.get('my_key')
print(f"Попробуйте Tweet после истечения срока действия значение ключа:{value_after_expiry}")
В приведенном выше примере,Сначала мы подключили сервер Redis,Затем установите срок действия ключа на 5 секунд. После ожидания 6 секунд,Мы пытаемся получить значение этого ключа еще раз. ты найдешь,Хотя мы пытались получить значение ключа после истечения срока действия,Но на самом деле возвращаетсяNone
,Это означает, что этот Ключ был удален.
Политика истечения срока действия Redis использует отложенное и регулярное удаление для управления данными с истекшим сроком действия. Хотя ключи с истекшим сроком действия не будут удалены немедленно, с помощью этой стратегии Redis может автоматически очищать данные с истекшим сроком действия и освобождать пространство памяти, обеспечивая при этом производительность. В практических приложениях мы должны разумно устанавливать срок действия в соответствии с потребностями бизнеса и выбирать подходящую стратегию истечения срока действия в соответствии с реальной ситуацией.