Изредка кэширование всей страницы не даёт ожидаемой пользы и, если честно, является неудобным.
Возможно, к примеру, ваш сайт содержит представление, чей результат зависит от нескольких сложных запросов и постоянно меняется. В таком случае, использование кэширования для всей страницы будет всё портить, так как некоторая часть данных будет постоянно меняться, но вам всё ещё необходимо использовать механизм кэширования.
Для случаев подобных этому, Django предоставляет простой интерфейс низкого уровня к механизму кэширования, который располагается в модуле django.core.cache. Вы можете использовать API низкого уровня для хранения объектов в кэше на любом уровне гранулярности, который вам потребуется. Вы можете поместить в кэш любой объект языка Python, который может быть сериализован с помощью модуля pickle: строки, словари, списки моделей объектов и так далее. (Почти каждый объект языка Python может быть сериализован, обратитесь к документации Python по модулю pickle.)
Вот так происходит импортирование API:
>>> from django.core.cache import cache
Простые методы set(key, value, timeout_seconds) и get(key):
>>> cache.set('my_key', 'hello, world!', 30)
>>> cache.get('my_key')
'hello, world!'
Аргумент timeout_seconds является необязательным, а его значение по умолчанию было указано ранее.
Если объект не существует в кэше или сам кэш недоступен, то
cache.get() возвращает None:
# Ждём 30 секунд пока 'my_key' "протухнет"...
>>> cache.get('my_key')
None
>>> cache.get('some_unset_key')
None
Мы не рекомендуем хранить строковое значение None в кэше, потому что вы не будете иметь возможность отличить ваше сохранённое None от отсутствия значения в кэше, которое тоже возвращается как None.
Функция cache.get() может принимать
аргумент default. Он определяет, какое значение
возвращать в случае отсутствия объекта в кэше:
>>> cache.get('my_key', 'has expired')
'has expired'
Для получения нескольких значений из кэша за один запрос надо
использовать метод cache.get_many(). Этот
метод обратиться к кэшу один раз при получении значений, если
это позволяет механизм кэша. Метод
cache.get_many() возвращает словарь с
запрошенными ключами, теми которые не «протухли»:
>>> cache.set('a', 1)
>>> cache.set('b', 2)
>>> cache.set('c', 3)
>>> cache.get_many(['a', 'b', 'c'])
{'a': 1, 'b': 2, 'c': 3}
Если запрашиваемое значение не существует или «протухло», то оно не будет включено в словарь:
>>> cache.get_many(['a', 'b', 'c', 'd'])
{'a': 1, 'b': 2, 'c': 3}
Наконец, вы можете явно удалять значения из кэша с помощью
метода delete(). Это простой способ
исключения определённого объекта из кэша:
>>> cache.delete('a')
Метод delete() не возвращает никакого
значения и работает вне зависимости от существования указанного
объекта в кэше.
| Пред. | Уровень выше | След. |
| Кэширование отдельного представления | Начало | Кэши верхнего уровня |
0 комментариев | Оставьте комментарий