Метод incr
Метод incr применяется к объекту кэша и атомарно
увеличивает числовое значение по указанному ключу на заданную
величину. Метод возвращает новое значение после инкрементации.
Если ключ не существует, возникает исключение ValueError.
Метод полезен для ведения счётчиков, подсчёта просмотров
и других операций, где требуется атомарное изменение значений.
Синтаксис
from django.core.cache import cache
new_value = cache.incr(key, delta=1)
Параметры
Метод принимает следующие параметры:
-
key- строка, идентифицирующая ключ в кэше; -
delta- целое число, на которое нужно увеличить значение (по умолчанию равно1).
Пример . С инкрементацией на 1
Давайте увеличим значение счётчика просмотров на единицу:
from django.core.cache import cache
# Устанавливаем начальное значение
cache.set('page_views', 100)
# Увеличиваем значение на 1
new_value = cache.incr('page_views')
print(new_value)
Результат выполнения кода:
"101"
Пример . С инкрементацией на заданное число
Увеличим значение счётчика на 5 за один вызов:
from django.core.cache import cache
# Устанавливаем начальное значение
cache.set('user_score', 50)
# Увеличиваем значение на 5
new_value = cache.incr('user_score', delta=5)
print(new_value)
Результат выполнения кода:
"55"
Пример . Обработка ошибки при отсутствии ключа
Попробуем увеличить значение несуществующего ключа:
from django.core.cache import cache
try:
cache.incr('non_existent_key')
except ValueError as e:
print(e)
Результат выполнения кода:
"Key 'non_existent_key' not found"
Пример . Использование в веб-приложении
Реализуем подсчёт просмотров статьи с использованием кэша:
from django.core.cache import cache
from django.http import HttpResponse
from myapp.models import Article
def article_detail(request, article_id):
article = Article.objects.get(id=article_id)
cache_key = f'article_views_{article_id}'
# Увеличиваем счётчик просмотров
if cache.has_key(cache_key):
cache.incr(cache_key)
else:
cache.set(cache_key, article.views_count)
views = cache.get(cache_key)
return HttpResponse(f'Views: {views}')