Главная | Архив новостей | Общение | Площадка | Примеры OpenID
Хостинг Django от «Джино»
Оглавление

API низкого уровня

Изредка кэширование всей страницы не даёт ожидаемой пользы и, если честно, является неудобным.

Возможно, к примеру, ваш сайт содержит представление, чей результат зависит от нескольких сложных запросов и постоянно меняется. В таком случае, использование кэширования для всей страницы будет всё портить, так как некоторая часть данных будет постоянно меняться, но вам всё ещё необходимо использовать механизм кэширования.

Для случаев подобных этому, 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() не возвращает никакого значения и работает вне зависимости от существования указанного объекта в кэше.


Увидели ошибку?
Выделите её мышкой и нажмите
Ctrl-Enter
Обработано:
1049 49 130 71

Версия книги
1.0 2.0
Версия 2.0 в процессе перевода!

Мой луч
Многообразие света

Полезное
Актуальные вакансии, Python работа для python-разработчиков.


Скачать в формате
CHM от 2 сентября

Заказать PDF файл можно через почту, чат, джаббер. Всего 2WMZ. Содержимое точно соответствует содержимому сайта.
Чем чаще заказываете — тем больше перевожу.

Русская группа

на поддержку перевода
Яндекс Яндекс.Деньги Хочу такую же кнопку
Ускорить процесс перевода!
R130494980980
Z425285133788
E112528079659
U327380922061

Книга помогла реализовать:
Проект «Мой луч»
АРМ УФМС.


Мой вебсайт стоит666 337,31 руб

© 2008-2009 Ruslan Popov @ gmail.com Powered by Django 1.1 beta 1 SVN-11114
Главная | Архив новостей | Общение | Площадка | Примеры OpenID