Метод add

Метод add применяется к объекту кэша и пытается сохранить значение по указанному ключу, но только если этот ключ отсутствует в кэше. Если ключ уже существует, операция не выполняется и метод возвращает False. В случае успешного добавления нового ключа возвращается True. Этот метод полезен для реализации блокировок или гарантии того, что значение будет установлено только один раз.

Синтаксис

pythoncache.add(key, value, timeout=None, version=None)

Параметры метода:

Пример

Попробуем добавить значение по ключу 'user_count', которого ещё нет в кэше:

pythonfrom django.core.cache import cache

res = cache.add('user_count', 150, timeout=60)
print(res)

Результат выполнения кода:

pythonTrue

Так как ключ отсутствовал, значение было успешно добавлено, и метод вернул True.

Пример

Теперь попробуем повторно добавить значение по тому же ключу 'user_count', но с другим значением:

pythonfrom django.core.cache import cache

res = cache.add('user_count', 200, timeout=60)
print(res)

Результат выполнения кода:

pythonFalse

Поскольку ключ уже существует, операция добавления не выполняется, и метод возвращает False. Значение в кэше остаётся прежним (150).

Пример

Метод add часто используется для реализации атомарной блокировки. Например, чтобы гарантировать, что фоновый процесс запустится только один раз:

pythonfrom django.core.cache import cache

lock_key = 'processing_lock'
acquired = cache.add(lock_key, 'locked', timeout=30)

if acquired:
  print("Процесс запущен, блокировка установлена")
else:
  print("Процесс уже запущен, блокировка активна")

Результат выполнения кода при первом запуске:

python"Процесс запущен, блокировка установлена"

При повторном вызове в течение 30 секунд результат будет другим:

python"Процесс уже запущен, блокировка активна"

Смотрите также

  • метод set,
    который устанавливает значение в кэш, перезаписывая существующий ключ
  • метод get,
    который получает значение из кэша по ключу
  • метод get_or_set,
    который возвращает значение из кэша или устанавливает его, если ключ отсутствует
  • метод delete,
    который удаляет значение из кэша по ключу