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
File details
Details for the file python-perl-chi-0.2.1.tar.gz
.
File metadata
- Download URL: python-perl-chi-0.2.1.tar.gz
- Upload date:
- Size: 12.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4441ba491aa94b2aa5e367a9fe78cf7f198814019622bfad7f5323173262766a |
|
MD5 | 45f86eb12734d1d6442dc0f370371455 |
|
BLAKE2b-256 | 5fa3afedb1a670d0ec38e0b111e18f45c23581606ad916f03da49615e4ee33e5 |
File details
Details for the file python_perl_chi-0.2.1-py3-none-any.whl
.
File metadata
- Download URL: python_perl_chi-0.2.1-py3-none-any.whl
- Upload date:
- Size: 15.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 252749fc8279d393e40250abba4d94537ce1d06018d67a183942de10dc373948 |
|
MD5 | db66328893bebe8c1cecfc88648da68b |
|
BLAKE2b-256 | 23609de6f6d7dfc0c494c23891009e01b6f8e99afedc6068906f7a377981a329 |