python-perl-chi - Унифицированный интерфейс обработки кэша
Project description
chi
NAME
python-perl-chi - Унифицированный интерфейс обработки кэша
VERSION
0.2.1
DESCRIPTION
from chi import CHI
chi = CHI(
server="127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003",
driver='redis_cluster',
)
chi.set("k1", "Привет Мир!", ttl=10)
print(chi.get("k1")) # -> "Привет Мир!"
print(chi.keys("k*")) # -> ["k1"]
print(chi.erase("k**")) # -> 1
chi.remove("k1")
SYNOPSIS
В языке perl есть унифицированный интерфейс обработки кэша. Он реализуется модулем https://metacpan.org/pod/CHI.
Главным ноу-хау CHI является то, что ключ считается просроченным в случайный промежуток времени между 80% и 100% TTL. Благодаря этому процессы, которые запрашивают ключ, будут получать его данные, а один процесс, которому "не повезёт" получить просроченный ключ, например, в 81% TTL начнёт формировать новые данные для ключа.
При использовании же обычных кешей все процессы начинают формировать данные для кеша, когда его TTL истекает.
Данные ключа запаковываются в бинарную структуру определённого формата и даже могут сжиматься gzip-ом.
Аргументы конструктора CHI(...)
:
- server - адрес сервера или серверов (
для redis-cluster
). Адрес имеет формат:"хост1:порт1,хост2:порт2..."
; - driver="redis-cluster" - часть имени модуля, который будет подгружен. Дополняется так:
"CHI.chi_driver_" + driver.replace("-", "_")
. В текущем пакете естьredis-cluster
,redis
иmemcache
; - expires_in=60 - время жизни ключа в секундах;
- early_expires_in=None - интервал в секундах преждевременного истечения срока жизни ключа. Для отключения используется константа
from CHI import CHI_MAX_TIME
; - expires_variance=0.5 - (от 0 до 1): коэффициент преждевременного истечения срока жизни ключа; Служит для расчёта early_expires_in если тот не указан;
- compress_threshold= - сжимать данные если они больше этого числа байт;
- connect_timeout=1 - таймаут коннекта к хранилищу в секундах;
- request_timeout=10 - таймаут запроса к хранилищу в секундах;
- strategy_of_erase='lua' - стратегия удаления для метода
erase(mask)
(только дляredis-cluster
). Значения:lua
- рассылает на все ноды кластера скрипт на lua, который удаляет ключи. Иkeys
- получает ключи по маске, а затем - удаляет. - compress_threshold - максимальная длина данных в байтах после которой будет происходить сжатие gzip-ом.
Для предотвращения конкуренции за ресурсы, когда ключ истекает и несколько запросивших его процессов начинают
одновременно генерировать для него данные, CHI обманывает один из процессов, что ключ уже удалён. Тогда
обманутый процесс сможет сгенерировать данные и поместить их в ключ прежде, чем ключ реально будет удалён.
Обман произойдёт в интервале от early_expires_in
до expires_in
.
early_expires_in
рассчитывается как expires_in * (1 - expires_variance)
. Поэтому если expires_variance=1
,
то обман может произойти на протяжении всей жизни ключа, а expires_variance=0
отменяет борьбу с конкуренцией
за ресурсы.
Методы:
-
get(key, builder=None, ttl=None)
- получить данные. builder - функция для создания ключа, если ключ не найден. ttl - время жизни ключа в секундах, если не указан, то используется self.expires_in; -
get_object(key, builder=None, ttl=30)
- получить объектCHI.chi_cache_object.CHICacheObject
; -
set(key, data, ttl=None, compress=None)
- установить данные. compress (True, False) - сжать их gzip-ом, если не указан - будет задействованself.compress_threshold
; -
set_object(key, data, ttl=None, compress=None)
- установить данные и вернуть объект Чи сформированный для установки; -
remove(key)
- удалить ключ; -
keys(mask)
- получить ключи соответствующие маске:*
- ноль или более любых символов кроме:
.:
используется сторонними приложениями для отделения сегментов ключа);**
- ноль или более любых символов;?
- предыдущего символа может не быть. Например:k:?x
, соответствует ключамk:x
иkx
;
-
erase(mask)
- удалить ключи соответствующие маске.
SCRIPTS
- chi
# Помещаем в ключ t:k1 структуру python. Данные сжимать gzip-ом. Время жизни ключа - 30 секунд
$ chi -S 127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003 set t:k1 -с '{"x": 6}' -z -t 30
# В кластер можно передавать только адрес одной ноды. Так же укажем драйвер явно
$ chi -S 127.0.0.1:7001 -D redis_cluster get t:k1
{
"x": 6
}
# Информацию об остальных командах можно получить так:
$ chi --help
$ chi <команда> --help
INSTALL
$ pip install python-perl-chi
REQUIREMENTS
- argparse
- data-printer
- redis-py-cluster
- redis
- pymemcache
HOMEPAGE
https://github.com/darviarush/python-perl-chi
AUTHOR
Yaroslav O. Kosmina darviarush@mail.ru
LICENSE
MIT License
Copyright (c) 2020 Yaroslav O. Kosmina
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for python_perl_chi-0.2.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 252749fc8279d393e40250abba4d94537ce1d06018d67a183942de10dc373948 |
|
MD5 | db66328893bebe8c1cecfc88648da68b |
|
BLAKE2b-256 | 23609de6f6d7dfc0c494c23891009e01b6f8e99afedc6068906f7a377981a329 |