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

Метод get_or_set

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

Синтаксис

cache.get_or_set(key, default, timeout=None, version=None)

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

  • key - строка, ключ для получения/установки значения в кеше;
  • default - значение по умолчанию или вызываемый объект (функция), который будет использован для получения значения, если ключ отсутствует;
  • timeout - время жизни кеша в секундах (по умолчанию используется глобальный таймаут);
  • version - версия ключа, используется для дополнительного управления кешем.

Пример . С использованием значения по умолчанию

Давайте получим из кеша количество статей, а если его нет, установим значение 10:

from django.core.cache import cache # Получаем значение из кеша или устанавливаем 10 articles_count = cache.get_or_set('articles_count', 10) print(articles_count)

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

"10"

Пример . С использованием вызываемой функции

Давайте получим из кеша список популярных статей, а если его нет, вызовем функцию для вычисления:

from django.core.cache import cache from myapp.models import Article def get_popular_articles(): # Сложный запрос к базе данных return list(Article.objects.filter(is_popular=True)) # Получаем из кеша или вычисляем через функцию popular = cache.get_or_set('popular_articles', get_popular_articles) for article in popular: print(article.title)

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

"article 1" "article 3" "article 5"

Пример . С установкой таймаута

Давайте получим из кеша общее количество пользователей, а если его нет, установим значение с таймаутом 60 секунд:

from django.core.cache import cache from myapp.models import User # Получаем из кеша или устанавливаем с таймаутом users_count = cache.get_or_set( 'users_count', User.objects.count, timeout=60 ) print(users_count)

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

"42"

Пример . С ленивым вычислением через lambda

Давайте получим из кеша список категорий, используя лямбда-функцию для вычисления:

from django.core.cache import cache from myapp.models import Category # Ленивое вычисление через lambda categories = cache.get_or_set( 'all_categories', lambda: list(Category.objects.all()) ) for category in categories: print(category.name)

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

"category 1" "category 2" "category 3"

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

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