Async библиотека для работы с Redis структурами и декоратор кэширования
Project description
rediscache 4.0.0
Async библиотека для работы с Redis структурами (хеши, списки, rate limiting).
Оптимизирована для работы с red_mng (async Redis manager).
Установка
# Из локальной директории
cd /Users/aleks/Libraryies/rediscache-4.0.0
pip install -e .
# Или через poetry
poetry add rediscache@file:///Users/aleks/Libraryies/rediscache-4.0.0
Возможности
- ✅ HashCache - работа с хешами Redis (HSET, HGETALL, HGET)
- ✅ ListCache - работа со списками Redis (RPUSH, LRANGE, TTL)
- ✅ RateLimiter - rate limiting через SET NX
- ✅ CacheUtils - утилиты (удаление по префиксам, проверка существования)
- ✅ Async/await
- ✅ Поддержка RedisRouter для построения ключей
- ✅ Логирование через LoggerMixin
Использование
1. Инициализация Redis
import red_mng
from config_fastapi import Config
# Регистрация подключения
redis_cfg = Config().extract("redis")
red_mng.register(
alias=redis_cfg.get("alias"),
**redis_cfg.extract("connection").to_dict()
)
2. HashCache - работа с хешами
import red_mng
from rediscache import HashCache
from your_project.redis import RedisRouter
from your_project.constants import PREFIX
redis = red_mng.get("default")
router = RedisRouter()
cache = HashCache(redis, router)
# Сохранить хеш
await cache.save(
PREFIX.TICK,
"BTCUSDT",
"binance",
data={"price": 50000, "volume": 1000}
)
# Получить хеш
data = await cache.get(PREFIX.TICK, "BTCUSDT", "binance")
# Найти все цены для символа
prices = await cache.find_field_by_pattern(
PREFIX.TICK,
"BTCUSDT",
"*",
field="price",
key_field="exchange",
decoder=lambda x: float(x.decode())
)
# → {"binance": 50000.0, "bybit": 50100.0}
3. ListCache - работа со списками
from rediscache import ListCache
list_cache = ListCache(redis, router)
# Добавить элемент с TTL
await list_cache.append(
PREFIX.OBSERVATION,
"BTCUSDT",
value=timestamp,
ttl=3600
)
# Получить все элементы
observations = await list_cache.get(
PREFIX.OBSERVATION,
"BTCUSDT",
decoder=lambda x: float(x.decode())
)
4. RateLimiter - rate limiting
from rediscache import RateLimiter
limiter = RateLimiter(redis, router)
# Проверить, можно ли выполнить действие
if await limiter.can_proceed(PREFIX.NOTIFY, "telegram", "BTCUSDT", ttl=60):
await send_notification()
# Следующий вызов в течение 60 секунд вернет False
5. Использование в контроллерах (рекомендуемый паттерн)
import red_mng as redis_manager
import rediscache
from config_fastapi import Config
from .baseclasses import BaseControl
from .redis import RedisRouter
class ArbitrageControl(BaseControl):
"""Контроллер для поиска арбитражных возможностей"""
config = Config(section="redis")
def __init__(self):
# Паттерн как в jobs: router + redis + cache
self.router = RedisRouter()
self.redis = redis_manager.get(self.config.get("alias"))
self.cache = rediscache.get(self.config.get("alias"))
async def arbitrage(self, tick: Tick) -> Tick | None:
# Высокоуровневые операции через cache
prices = await self.cache.hash.find_field_by_pattern(
PREFIX.TICK, tick.symbol, "*",
field="price",
key_field="exchange",
decoder=lambda x: float(x.decode())
)
# Можно использовать router напрямую для построения ключей
key = self.router.url_for(PREFIX.TICK, tick.symbol, "binance")
# Можно использовать redis напрямую для низкоуровневых операций
data = await self.redis.hgetall(key)
return tick
API Reference
HashCache
Методы:
save(prefix, *keys, data)- сохранить хешget(prefix, *keys)- получить хеш целикомget_field(prefix, *keys, field)- получить одно полеfind_by_pattern(prefix, *keys)- найти все хеши по паттернуfind_field_by_pattern(prefix, *keys, field, key_field, decoder)- найти значения поляcheck_field(prefix, *keys, field, expected)- проверить значение поляdelete_by_pattern(prefix, *keys)- удалить ключи по паттерну
ListCache
Методы:
append(prefix, *keys, value, ttl)- добавить в конец спискаprepend(prefix, *keys, value, ttl)- добавить в начало спискаget(prefix, *keys, start, end, decoder)- получить элементыlength(prefix, *keys)- получить длину спискаdelete(prefix, *keys)- удалить список
RateLimiter
Методы:
can_proceed(prefix, *keys, ttl, value)- проверить rate limitreset(prefix, *keys)- сбросить rate limit
CacheUtils
Методы:
delete_by_prefixes(*prefixes)- удалить все ключи по префиксамexists(prefix, *keys)- проверить существование ключаset_ttl(prefix, *keys, ttl)- установить TTL
Требования
- Python ≥ 3.11
- redis ≥ 5.0.0
- red_mng (async Redis manager)
- RedisRouter с методом
url_for(prefix, *keys)
Отличия от rediscache-3.0.0
- ❌ Убраны sync декораторы
@cachedи@acached(не работают с async) - ✅ Добавлены async классы для работы с Redis структурами
- ✅ Полная поддержка async/await
- ✅ Оптимизировано для работы с red_mng
Лицензия
Proprietary - для внутреннего использования компании.
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
aiorediscache-4.1.0.tar.gz
(13.4 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aiorediscache-4.1.0.tar.gz.
File metadata
- Download URL: aiorediscache-4.1.0.tar.gz
- Upload date:
- Size: 13.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.1 CPython/3.13.12 Darwin/25.4.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eabd2f950e7c90e53ea89fe357988216c713a37090a1af3cf9883ff79fdd5668
|
|
| MD5 |
d33daed42f9ccb4c7f007e335cf39dd9
|
|
| BLAKE2b-256 |
481ba93ec595155cd2751004327b2fcae15ba3e8791990760697fae87edb397b
|
File details
Details for the file aiorediscache-4.1.0-py3-none-any.whl.
File metadata
- Download URL: aiorediscache-4.1.0-py3-none-any.whl
- Upload date:
- Size: 16.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.1 CPython/3.13.12 Darwin/25.4.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
25a9711a0b9d7c123d5232dcc522043bea9d39db661587ada339572f5e124d8b
|
|
| MD5 |
67ca2154117d3324d6148eceeb8927c5
|
|
| BLAKE2b-256 |
c34ccd685babef80f3778db3c9b9668f93573c9bb472c9c837a53ddf19d669bf
|