Skip to main content

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

Metadata

Release files for python-perl-chi 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for python-perl-chi 0.2.1
File Size Uploaded Provenance Actions
python-perl-chi-0.2.1.tar.gz 12.0 kB Without provenance Details for python-perl-chi-0.2.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for python-perl-chi 0.2.1
File Interpreter ABI Platform Actions
python_perl_chi-0.2.1-py3-none-any.whl Python 3 none any Details for python_perl_chi-0.2.1-py3-none-any.whl

Total release size: 27.1 kB

Release files / python-perl-chi-0.2.1.tar.gz

Download URL python-perl-chi-0.2.1.tar.gz
Size 12.0 kB
Tags Source
SHA-256 checksum
How to use checksums
4441ba491aa94b2aa5e367a9fe78cf7f198814019622bfad7f5323173262766a
BLAKE2b-256 checksum
How to use checksums
5fa3afedb1a670d0ec38e0b111e18f45c23581606ad916f03da49615e4ee33e5
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / python_perl_chi-0.2.1-py3-none-any.whl

Download URL python_perl_chi-0.2.1-py3-none-any.whl
Size 15.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
252749fc8279d393e40250abba4d94537ce1d06018d67a183942de10dc373948
BLAKE2b-256 checksum
How to use checksums
23609de6f6d7dfc0c494c23891009e01b6f8e99afedc6068906f7a377981a329
Upload date
Uploaded using Trusted Publishing?
What is 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

Security for python-perl-chi 0.2.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page