Package: python-perl-chi
chiNAMEpython-perl-chi - Унифицированный интерфейс обработки кэшаVERSION0.2.1DESCRIPTIONfromchiimportCHIchi=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**"))# -> 1chi.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)- удалить ключи соответствующие маске.SCRIPTSchi# Помещаем в ключ t:k1 структуру python. Данные сжимать gzip-ом. Время жизни ключа - 30 секунд$chi-S127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003sett:k1-с'{"x": 6}'-z-t30# В кластер можно передавать только адрес одной ноды. Так же укажем драйвер явно$chi-S127.0.0.1:7001-Dredis_clustergett:k1{"x":6}# Информацию об остальных командах можно получить так:$chi--help
$chi<команда>--helpINSTALL$pipinstallpython-perl-chiREQUIREMENTSargparsedata-printerredis-py-clusterredispymemcacheHOMEPAGEhttps://github.com/darviarush/python-perl-chiAUTHORYaroslav O. Kosminadarviarush@mail.ruLICENSEMIT LicenseCopyright (c) 2020 Yaroslav O. Kosmina