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
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
|