Метод delete_many
Метод delete_many применяется к объекту кэша и удаляет
несколько ключей за один вызов. В качестве аргумента
метод принимает список или кортеж с именами ключей,
которые необходимо удалить. Метод возвращает количество
успешно удаленных ключей. В зависимости от используемого
бэкенда кэширования, метод может работать по-разному,
но в большинстве случаев удаление нескольких ключей
выполняется более эффективно, чем поочередное удаление.
Синтаксис
cache.delete_many(keys)
Где keys - это список или кортеж строковых ключей,
которые нужно удалить из кэша.
Пример
Давайте удалим несколько ключей из кэша:
from django.core.cache import cache
# Set some cache values
cache.set('user_1_name', 'John')
cache.set('user_1_age', 25)
cache.set('user_2_name', 'Jane')
cache.set('user_2_age', 30)
# Delete multiple keys
keys_to_delete = ['user_1_name', 'user_1_age']
deleted_count = cache.delete_many(keys_to_delete)
print(deleted_count)
Результат выполнения кода:
2
Метод вернул количество удаленных ключей. При этом
ключи 'user_2_name' и 'user_2_age'
остались в кэше, так как не были указаны для удаления.
Пример
Давайте попробуем удалить ключи, которых нет в кэше:
from django.core.cache import cache
# Delete keys that don't exist
keys_to_delete = ['non_existent_key_1', 'non_existent_key_2']
deleted_count = cache.delete_many(keys_to_delete)
print(deleted_count)
Результат выполнения кода:
0
Метод вернул 0, так как указанные ключи не были
найдены в кэше. Это поведение отличается от метода
delete, который в такой ситуации просто
ничего не делает без возврата значения.
Пример
Рассмотрим практический пример использования метода для очистки кэша после обновления данных:
from django.core.cache import cache
from myapp.models import Article
# Update article
article = Article.objects.get(id=1)
article.title = 'New Title'
article.save()
# Delete all cache keys related to this article
keys_to_delete = [
f'article_{article.id}_detail',
f'article_{article.id}_comments',
f'article_{article.id}_stats'
]
deleted_count = cache.delete_many(keys_to_delete)
print(deleted_count)
Результат выполнения кода:
3
Метод удалил все три ключа, связанных с обновленной статьей. Это гарантирует, что при следующем запросе пользователь получит актуальные данные из базы данных, а не устаревшие данные из кэша.