Эффективные способы удаления ключей, соответствующих шаблону, в Redis

Redis – популярное хранилище структур данных в памяти, предлагающее высокопроизводительные операции с ключами. Удаление ключей, соответствующих определенному шаблону, может быть распространенным требованием при работе с Redis. В этой статье мы рассмотрим несколько методов атомарного удаления ключей, соответствующих шаблону, с помощью Redis. Мы предоставим примеры кода для каждого метода, чтобы проиллюстрировать их использование и эффективность.

Метод 1: использование команд KEYS и DEL
Самый простой способ удалить ключи, соответствующие шаблону в Redis, — использовать команду KEYSдля получения ключей, а затем использовать команду DELкоманда для их удаления. Вот пример использования интерфейса командной строки Redis:

redis-cli KEYS "prefix:*" | xargs redis-cli DEL

Эта команда извлекает все ключи с шаблоном «префикс», передает их по направлению xargs, а затем удаляет их с помощью команды DEL.

Метод 2: использование команд SCAN и DEL
Команда SCANпредоставляет альтернативный способ перебора ключей в Redis. В отличие от KEYS, который может блокировать сервер на длительное время при работе с большими наборами данных, SCANиспользует подход на основе итераторов, позволяющий избежать блокировки. Вот пример использования команд SCANи DELдля удаления ключей, соответствующих шаблону:

import redis
def delete_keys_with_pattern(pattern):
    r = redis.Redis()
    keys = []
    cursor = "0"
    while cursor != 0:
        cursor, partial_keys = r.scan(cursor=cursor, match=pattern)
        keys.extend(partial_keys)
    if keys:
        r.delete(*keys)
delete_keys_with_pattern("prefix:*")

Метод 3: использование сценариев Lua
Redis позволяет атомарно выполнять сценарии Lua на сервере. Мы можем использовать эту функцию для удаления ключей, соответствующих шаблону. Вот пример:

local keys = redis.call('KEYS', 'prefix:*')
for _, key in ipairs(keys) do
    redis.call('DEL', key)
end

Чтобы выполнить этот скрипт с помощью интерфейса командной строки Redis:

redis-cli EVAL "local keys = redis.call('KEYS', 'prefix:*') for _, key in ipairs(keys) do redis.call('DEL', key) end" 0

В этой статье мы рассмотрели различные методы атомарного удаления ключей, соответствующих шаблону, в Redis. Мы рассмотрели простой подход с использованием команд KEYSи DEL, более эффективный метод с использованием команд SCANи DELи подход к написанию сценариев Lua. В зависимости от размера вашего набора данных и требований к производительности вы можете выбрать наиболее подходящий метод. Не забывайте соблюдать осторожность при удалении ключей, поскольку это может иметь необратимые последствия для ваших данных.