Метод add
Метод add применяется к объекту кэша и пытается
сохранить значение по указанному ключу, но только если
этот ключ отсутствует в кэше. Если ключ уже существует,
операция не выполняется и метод возвращает False.
В случае успешного добавления нового ключа возвращается
True. Этот метод полезен для реализации блокировок
или гарантии того, что значение будет установлено только
один раз.
Синтаксис
cache.add(key, value, timeout=None, version=None)
Параметры метода:
- ⁅b⁆key⁅/b⁆ - строка, идентифицирующая значение в кэше;
- ⁅b⁆value⁅/b⁆ - данные для сохранения;
- ⁅b⁆timeout⁅/b⁆ - время жизни ключа в секундах (по умолчанию используется тайм-аут из настроек кэша);
- ⁅b⁆version⁅/b⁆ - версия ключа, позволяющая управлять разными версиями кэша.
Пример
Попробуем добавить значение по ключу 'user_count',
которого ещё нет в кэше:
from django.core.cache import cache
res = cache.add('user_count', 150, timeout=60)
print(res)
Результат выполнения кода:
True
Так как ключ отсутствовал, значение было успешно добавлено,
и метод вернул True.
Пример
Теперь попробуем повторно добавить значение по тому же ключу
'user_count', но с другим значением:
from django.core.cache import cache
res = cache.add('user_count', 200, timeout=60)
print(res)
Результат выполнения кода:
False
Поскольку ключ уже существует, операция добавления не
выполняется, и метод возвращает False. Значение
в кэше остаётся прежним (150).
Пример
Метод add часто используется для реализации
атомарной блокировки. Например, чтобы гарантировать,
что фоновый процесс запустится только один раз:
from django.core.cache import cache
lock_key = 'processing_lock'
acquired = cache.add(lock_key, 'locked', timeout=30)
if acquired:
print("Процесс запущен, блокировка установлена")
else:
print("Процесс уже запущен, блокировка активна")
Результат выполнения кода при первом запуске:
"Процесс запущен, блокировка установлена"
При повторном вызове в течение 30 секунд результат
будет другим:
"Процесс уже запущен, блокировка активна"
Смотрите также
-
метод
set,
который устанавливает значение в кэш, перезаписывая существующий ключ -
метод
get,
который получает значение из кэша по ключу -
метод
get_or_set,
который возвращает значение из кэша или устанавливает его, если ключ отсутствует -
метод
delete,
который удаляет значение из кэша по ключу