1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/azhai-rdcache

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Кэширование для людей

Установка

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):
    # ...

Dummy Cache

Cache предоставляет «поддельные» кэши для локальной разработки без бэкэнд-кеша: DummyCache.

P.S.

Если вы пользователь Ruby, ознакомьтесь с аналогичной библиотекой Cacher для Ruby

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Кэширование для людей Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/azhai-rdcache.git
git@api.gitlife.ru:oschina-mirror/azhai-rdcache.git
oschina-mirror
azhai-rdcache
azhai-rdcache
master