Кэш
Предупреждение
Устарело начиная с версии 0.15: Будет удалено в версии 1.0. Было выделено в cachelib.
werkzeug.contrib.cache
Основная проблема с динамическими веб-сайтами заключается в том, что они динамические. Каждый раз, когда пользователь запрашивает страницу, веб-сервер выполняет много кода, обращается к базе данных, рендерит шаблоны, пока посетитель не получит видимую страницу.
Это гораздо дороже, чем просто загрузить файл из файловой системы и отправить его посетителю.
Для большинства веб-приложений эта нагрузка не является большой проблемой, но когда она становится таковой, вы будете рады иметь систему кэширования.
Как работает кэширование
Кэширование довольно просто. В основном у вас есть объект кэша где-то, который подключен к удаленному кэшу, файловой системе или чему-то еще. Когда приходит запрос, вы проверяете, есть ли текущая страница уже в кэше, и если да, возвращаете ее из кэша. В противном случае вы генерируете страницу и помещаете ее в кэш. (Или фрагмент страницы, вам не нужно кэшировать все целиком)
Вот простой пример, как кэшировать сайдбар на 5 минут:
def get_sidebar(user):
identifier = 'sidebar_for/user%d' % user.id
value = cache.get(identifier)
if value is not None:
return value
value = generate_sidebar_for(user=user)
cache.set(identifier, value, timeout=60 * 5)
return value
Создание объекта кэша
Чтобы создать объект кэша, просто импортируйте систему кэширования из модуля cache и создайте его экземпляр. Затем вы можете начать работать с этим объектом:
>>> from werkzeug.contrib.cache import SimpleCache
>>> c = SimpleCache()
>>> c.set("foo", "value")
>>> c.get("foo")
'value'
>>> c.get("missing") is None
True
Пожалуйста, имейте в виду, что вам нужно создать кэш и поместить его в доступное место (либо в качестве глобального модуля, который можно импортировать, либо просто в ваше приложение WSGI).
API системы кэширования
-
class werkzeug.contrib.cache.BaseCache(default_timeout=300) -
Базовый класс для систем кэширования. Все системы кэширования реализуют этот API или его надмножество.
Параметры: default_timeout – время ожидания по умолчанию (в секундах), которое используется, если время ожидания не указано в set(). Время ожидания 0 означает, что кэш никогда не истекает.-
add(key, value, timeout=None) -
Работает как
set(), но не перезаписывает значения уже существующих ключей.Параметры: - key – ключ для установки
- value – значение для ключа
- timeout – время ожидания кэша для ключа в секундах (если не указано, используется время ожидания по умолчанию). Время ожидания 0 означает, что кэш никогда не истекает.
Возвращает: То же, что и
set(), но такжеFalseдля уже существующих ключей.Тип возвращаемого значения: boolean
-
clear() -
Очищает кэш. Имейте в виду, что не все кэши поддерживают полную очистку кэша.
Возвращает: Очищен ли кэш. Тип возвращаемого значения: boolean
-
dec(key, delta=1) -
Уменьшает значение ключа на
delta. Если ключ еще не существует, он инициализируется значением-delta.Для поддерживающих кэшей это атомарная операция.
Параметры: - key – ключ для уменьшения.
- delta – значение для вычитания.
Возвращает: Новое значение или
Noneдля ошибок бэкенда.
-
delete(key) -
Удаляет
keyиз кэша.Параметры: key – ключ для удаления. Возвращает: Существовал ли ключ и был ли он удален. Тип возвращаемого значения: boolean
-
delete_many(*keys) -
Удаляет несколько ключей одновременно.
Параметры: keys – Функция принимает несколько ключей в качестве позиционных аргументов. Возвращает: Были ли удалены все указанные ключи. Тип возвращаемого значения: boolean
-
get(key) -
Ищет ключ в кэше и возвращает его значение.
Параметры: key – искомый ключ. Возвращает: Значение, если оно существует и доступно для чтения, иначе None.
-
get_dict(*keys) -
Как
get_many(), но возвращает словарь:d = cache.get_dict("foo", "bar") foo = d["foo"] bar = d["bar"]Параметры: keys – Функция принимает несколько ключей в качестве позиционных аргументов.
-
get_many(*keys) -
Возвращает список значений для заданных ключей. Для каждого ключа создается элемент в списке:
foo, bar = cache.get_many("foo", "bar")Имеет ту же обработку ошибок, что и
get().Параметры: keys – Функция принимает несколько ключей в качестве позиционных аргументов.
-
has(key) -
Проверяет, существует ли ключ в кэше, не возвращая его. Это недорогая операция, которая обходит загрузку фактических данных на бэкенде.
Этот метод является необязательным и может быть не реализован во всех кэшах.
Параметры: key – проверяемый ключ
-
inc(key, delta=1) -
Увеличивает значение ключа на
delta. Если ключ еще не существует, он инициализируется значениемdelta.Для поддерживающих кэшей это атомарная операция.
Параметры: - key – ключ для увеличения.
- delta – значение для добавления.
Возвращает: Новое значение или
Noneдля ошибок бэкенда.
-
set(key, value, timeout=None) -
Добавляет новый ключ/значение в кэш (перезаписывает значение, если ключ уже существует в кэше).
Параметры: - key – ключ для установки
- value – значение для ключа
- timeout – время ожидания кэша для ключа в секундах (если не указано, используется время ожидания по умолчанию). Время ожидания 0 означает, что кэш никогда не истекает.
Возвращает: Trueесли ключ был обновлен,Falseдля ошибок бэкенда. Однако ошибки сериализации приведут к возбуждению подклассаpickle.PickleError.Тип возвращаемого значения: boolean
-
set_many(mapping, timeout=None) -
Устанавливает несколько ключей и значений из отображения.
Параметры: - mapping – отображение с ключами/значениями для установки.
- timeout – время ожидания кэша для ключа в секундах (если не указано, используется время ожидания по умолчанию). Время ожидания 0 означает, что кэш никогда не истекает.
Возвращает: Были ли установлены все указанные ключи.
Тип возвращаемого значения: boolean
-
Системы кэширования
-
class werkzeug.contrib.cache.NullCache(default_timeout=300) -
Кэш, который ничего не кэширует. Это может быть полезно для модульного тестирования.
Параметры: default_timeout – фиктивный параметр, который игнорируется, но существует для совместимости API с другими кэшами.
-
class werkzeug.contrib.cache.SimpleCache(threshold=500, default_timeout=300) -
Простой кэш памяти для однопроцессных сред. Этот класс существует в основном для сервера разработки и не является на 100% потокобезопасным. Он пытается использовать как можно больше атомарных операций и без блокировок для простоты, но может случиться при высокой нагрузке, что ключи будут добавлены несколько раз.
Параметры: - threshold – максимальное количество элементов, которые хранит кэш, прежде чем начнет удалять некоторые.
-
default_timeout – время ожидания по умолчанию, которое используется, если время ожидания не указано в
set(). Время ожидания 0 означает, что кэш никогда не истекает.
-
class werkzeug.contrib.cache.MemcachedCache(servers=None, default_timeout=300, key_prefix=None) -
Кэш, использующий memcached в качестве бэкенда.
Первый аргумент может быть объектом, имитирующим API
memcache.Client, или кортежем/списком адресов серверов. В случае передачи кортежа/списка, Werkzeug пытается импортировать наиболее подходящую библиотеку memcache.Этот кэш ищет следующие пакеты/модули, чтобы найти bindings для memcached:
pylibmcgoogle.appengine.api.memcachedmemcachedlibmc
Примечания к реализации: Этот бэкенд кэша обходит некоторые ограничения memcached, чтобы упростить интерфейс. Например, ключи unicode кодируются в utf-8 на лету. Методы, такие как
get_dict(), возвращают ключи в том же формате, что и введенные. Кроме того, все методы get молча игнорируют ошибки ключей, чтобы не создавать проблем при передаче недоверенных данных пользователя методам get, что часто случается в веб-приложениях.Параметры: -
servers – список или кортеж адресов серверов, или альтернативно
memcache.Clientили совместимый клиент. -
default_timeout – значение по умолчанию для таймаута, используемого, если таймаут не указан в
set(). Значение 0 указывает, что кэш никогда не истекает. -
key_prefix – префикс, добавляемый перед всеми ключами. Это позволяет использовать один и тот же сервер memcached для разных приложений. Имейте в виду, что
clear()также очистит ключи с другим префиксом.
-
class werkzeug.contrib.cache.GAEMemcachedCache -
Этот класс устарел в пользу
MemcachedCache, который теперь также поддерживает Google Appengine.Изменено в версии 0.8: Устарел в пользу
MemcachedCache.
-
class werkzeug.contrib.cache.RedisCache(host='localhost', port=6379, password=None, db=0, default_timeout=300, key_prefix=None, **kwargs) -
Использует хранилище Redis key-value в качестве бэкенда кэша.
Первый аргумент может быть строкой, обозначающей адрес сервера Redis, или объектом, напоминающим экземпляр класса redis.Redis.
Примечание: Python Redis API уже заботится о кодировании строк unicode на лету.
Добавлена в версии 0.7.
Добавлена в версии 0.8:
key_prefixбыл добавлен.Изменено в версии 0.8: Этот бэкенд кэша теперь корректно сериализует объекты.
Изменено в версии 0.8.3: Этот бэкенд кэша теперь поддерживает аутентификацию по паролю.
Изменено в версии 0.10:
**kwargsтеперь передается объекту redis.Параметры: - host – адрес сервера Redis или объект, чей API совместим с официальным Python Redis клиентом (redis-py).
- port – номер порта, на котором Redis сервер слушает подключения.
- password – пароль для аутентификации на Redis сервере.
- db – база данных (индекс, нумеруемый с нуля) на Redis сервере для подключения.
-
default_timeout – значение по умолчанию для таймаута, используемого, если таймаут не указан в
set(). Значение 0 указывает, что кэш никогда не истекает. - key_prefix – префикс, который должен быть добавлен ко всем ключам.
Любые дополнительные ключевые аргументы будут переданы в
redis.Redis.
-
class werkzeug.contrib.cache.FileSystemCache(cache_dir, threshold=500, default_timeout=300, mode=384) -
Кэш, хранящий элементы в файловой системе. Этот кэш зависит от того, что он единственный пользователь
cache_dir. Убедитесь, что никто другой не хранит файлы там, иначе кэш будет случайным образом удалять файлы.Параметры: - cache_dir – каталог, в котором хранятся файлы кэша.
- threshold – максимальное количество элементов, хранящихся в кэше, прежде чем он начнёт удалять некоторые. Значение 0 указывает отсутствие порога.
-
default_timeout – значение по умолчанию для таймаута, используемого, если таймаут не указан в
set(). Значение 0 указывает, что кэш никогда не истекает. - mode – желаемый режим файла для файлов кэша, по умолчанию 0600
-
class werkzeug.contrib.cache.UWSGICache(default_timeout=300, cache='') -
Реализует кэш, используя фреймворк кэширования uWSGI.
Примечание
Этот класс нельзя использовать при запуске под PyPy, так как реализация API uWSGI для PyPy не имеет необходимой функциональности.
Параметры: - default_timeout – значение таймаута по умолчанию в секундах.
- cache – имя экземпляра кэширования для подключения, например: mycache@localhost:3031, по умолчанию пустая строка, что означает, что uWSGI будет кэшировать в локальном экземпляре. Если кэш находится в том же экземпляре, что и приложение Werkzeug, вам нужно указать только имя кэша.
© 2007–2020 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/0.15.x/contrib/cache/