Кэширование для людей
pip install -U anyjson redis rdcache
# Для memcache
import pylibmc
from rdcache import Cache
backend = pylibmc.Client(["127.0.0.1"])
cache = Cache(backend)
# Для Redis
REDIS_CONFS = {
"default": {
"host": "127.0.0.1",
"port": 6379,
"password": "",
"db": 0,
"socket_timeout": 3600,
"max_connections": 128,
},
}
from rdcache.ext import RedisCache, RedisPool
redis = RedisPool(REDIS_CONFS)
cache = RedisCache(redis.get('default'), touch = False)
@cache("mykey-%s")
def some_expensive_method(num):
sleep(10)
if not isinstance(num, int):
if isinstance(num, basestring) and num.isdigit():
num = int(num)
else:
num = 0
return num
# читает 42 из кэша, ключ — mykey-42
some_expensive_method(42)
# пересчитывает и записывает 42 в кэш
some_expensive_method.refresh(42)
# получает значение из кэша или выдаёт ошибку
# (если не было передано default= при вызове @cache(...))
some_expensive_method.cached(42)
Опции можно передать либо конструктору Cache
, либо декоратору. Опции, переданные декоратору, имеют приоритет. Доступные опции:
enabled Если `False`, бэкэнд-кэш вообще не будет использоваться,
и ваши функции будут выполняться как есть, даже когда вы вызываете
`.cached()`. Это полезно для разработки, когда функция может быстро меняться.
По умолчанию: True
default Если указано, `.cached()` вернёт заданное значение вместо
выдачи ошибки KeyError.
type data/json
string/json/hash/list/set/zset (если бэкенд — redis)
По умолчанию: data
time время истечения срока действия в секундах
По умолчанию: -1 (бессрочно)
touch Если true, срок действия истекает через время expire seconds каждый раз при чтении данных
Остальные опции, если они указаны, будут переданы в качестве аргументов ключевого слова методу set
бэкэнда. Это полезно для таких вещей, как время истечения срока действия — например, при использовании pylibmc:
@cache("some_key_%s_%d", type='json', time=3600)
def expensive_method(name, ver=1):
# ...
Cache предоставляет «поддельные» кэши для локальной разработки без бэкэнд-кеша: DummyCache
.
Если вы пользователь Ruby, ознакомьтесь с аналогичной библиотекой Cacher для Ruby
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )