← Назад к вопросам

Какой командой полностью отчистить таблицу в Redis?

1.8 Middle🔥 131 комментариев
#Базы данных (NoSQL)

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Полная очистка таблиц в Redis

В Redis не существует концепции "таблиц" в привычном смысле, как в SQL базах данных. Вместо этого Redis использует ключи и структуры данных (строки, списки, хеши, множества, отсортированные множества). Однако есть несколько способов очистить данные в зависимости от конкретной задачи.

Основные команды очистки

1. FLUSHDB — очистить текущую БД целиком

Это самая простая команда для полной очистки всех ключей текущей базы данных (по умолчанию БД 0):

import redis

client = redis.Redis(host="localhost", port=6379, db=0)

# Очистить текущую БД полностью
client.flushdb()

# С асинхронным удалением (быстрее)
client.flushdb(async_flush=True)  # Redis 4.0+

2. FLUSHALL — очистить все БД

Если нужно удалить данные из всех 16 баз данных Redis:

# Очистить все БД целиком
client.flushall()

# Асинхронно
client.flushall(async_flush=True)

Очистка по паттерну (частичная)

3. Удаление ключей по маске

Если нужно удалить не всю БД, а только ключи, соответствующие определённому паттерну:

# Найти все ключи по паттерну и удалить
pattern = "user:*"
keys = client.keys(pattern)
if keys:
    client.delete(*keys)

# Для больших наборов данных используй SCAN (итератор)
pipeline = client.pipeline()
for key in client.scan_iter(match="session:*"):
    pipeline.delete(key)
    if pipeline.command_stack.__len__() >= 100:  # Batch удаление
        pipeline.execute()
        pipeline = client.pipeline()
pipeline.execute()

Практический пример: очистка таблицы кеша

from redis import Redis
from typing import Optional

class CacheManager:
    def __init__(self, redis_url: str = "redis://localhost:6379/0"):
        self.client = Redis.from_url(redis_url, decode_responses=True)
    
    def clear_entire_cache(self) -> None:
        """Полная очистка текущей БД"""
        self.client.flushdb()
        print("Кеш полностью очищен")
    
    def clear_cache_by_namespace(self, namespace: str) -> int:
        """Очистить кеш для определённого namespace"""
        cursor = 0
        deleted_count = 0
        
        while True:
            cursor, keys = self.client.scan(
                cursor,
                match=f"{namespace}:*",
                count=1000
            )
            if keys:
                deleted_count += self.client.delete(*keys)
            
            if cursor == 0:
                break
        
        return deleted_count
    
    def clear_expired_keys(self) -> None:
        """Redis автоматически удаляет истёкшие ключи (lazy deletion)
        Можно использовать CONFIG rewrite для оптимизации"""
        self.client.config_set("maxmemory-policy", "allkeys-lru")
        print("Установлена политика вытеснения старых ключей")

# Использование
cache = CacheManager()

# Полная очистка
cache.clear_entire_cache()

# Очистка по namespace
deleted = cache.clear_cache_by_namespace("user_profile")
print(f"Удалено ключей: {deleted}")

CLI команды Redis

Если работаешь через redis-cli:

# Очистить текущую БД (0)
FLUSHDB

# Очистить все БД
FLUSHALL

# Асинхронная очистка (не блокирует)
FLUSHDB ASYNC

# Удалить ключи по паттерну
KEYS "user:*" | xargs redis-cli DEL

Важные замечания

  • FLUSHDB vs FLUSHALL: FLUSHDB удаляет только текущую БД, FLUSHALL удаляет все
  • Блокирующие операции: FLUSHDB без ASYNC может заблокировать Redis на время выполнения на больших базах
  • async_flush=True: В Redis 4.0+ добавлена асинхронная очистка для избежания блокировок
  • SCAN vs KEYS: Используй SCAN для больших наборов данных, KEYS блокирует Redis
  • Безопасность: FLUSHDB и FLUSHALL лучше отключить в продакшене (CONFIG SET "databases" "1")

Для большинства задач достаточно FLUSHDB — это полностью очищает текущую базу данных Redis.

Какой командой полностью отчистить таблицу в Redis? | PrepBro