РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
679 of 818 menu

Метод decr

Метод decr применяется к объекту кеша и атомарно уменьшает значение целочисленного ключа на заданное количество. Если ключ не существует, метод создает его со значением равным отрицательному значению величины декремента. Метод особенно полезен для подсчета статистики, ограничения количества запросов или реализации счетчиков в реальном времени. Атомарность операции гарантирует корректность данных при конкурентном доступе.

Синтаксис

cache.decr(key, delta=1, version=None)

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

  • ⁅b⁆key⁅/b⁆ - строка, идентифицирующая ключ в кеше (обязательный параметр)
  • ⁅b⁆delta⁅/b⁆ - целое число, на которое уменьшается значение (по умолчанию 1)
  • ⁅b⁆version⁅/b⁆ - версия ключа для кеша с поддержкой версионирования (по умолчанию None)

Пример . Использование

Создадим счетчик посещений страницы и будем уменьшать его при каждом посещении:

from django.core.cache import cache # Установим начальное значение счетчика cache.set('page_visits', 100, timeout=3600) print(f"Initial: {cache.get('page_visits')}") # Уменьшим счетчик на 1 new_value = cache.decr('page_visits') print(f"After decr: {new_value}") # Уменьшим счетчик на 5 new_value = cache.decr('page_visits', delta=5) print(f"After decr(5): {new_value}")

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

"Initial: 100" "After decr: 99" "After decr(5): 94"

Пример . С несуществующим ключом

При попытке декремента несуществующего ключа, метод создает его со значением -delta:

from django.core.cache import cache # Проверим отсутствие ключа if not cache.has_key('new_counter'): print("Key 'new_counter' does not exist") # Выполним декремент несуществующего ключа result = cache.decr('new_counter', delta=3) print(f"Result: {result}") # Проверим созданное значение value = cache.get('new_counter') print(f"Actual value: {value}")

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

"Key 'new_counter' does not exist" "Result: -3" "Actual value: -3"

Пример . Использование в реальном приложении

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

from django.core.cache import cache from django.http import JsonResponse def check_login_attempts(request, username): cache_key = f"login_attempts_{username}" max_attempts = 5 attempts = cache.get(cache_key, default=0) if attempts >= max_attempts: return JsonResponse({ "status": "error", "message": "Too many login attempts. Try again later." }) # Увеличиваем счетчик при неудачной попытке cache.incr(cache_key, delta=1) # При успешном входе очищаем счетчик if login_successful(request): cache.delete(cache_key) return JsonResponse({"status": "success"}) remaining_attempts = max_attempts - cache.get(cache_key) return JsonResponse({ "status": "error", "remaining_attempts": remaining_attempts })

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

  • метод incr,
    который атомарно увеличивает значение ключа на заданную величину
  • метод get,
    который получает значение ключа из кеша
  • метод set,
    который устанавливает значение ключа в кеше
  • метод delete,
    который удаляет ключ из кеша
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить