Skip to main content

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 limit
  • reset(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


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)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aiorediscache-4.1.0-py3-none-any.whl (16.2 kB view details)

Uploaded Python 3

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

Hashes for aiorediscache-4.1.0.tar.gz
Algorithm Hash digest
SHA256 eabd2f950e7c90e53ea89fe357988216c713a37090a1af3cf9883ff79fdd5668
MD5 d33daed42f9ccb4c7f007e335cf39dd9
BLAKE2b-256 481ba93ec595155cd2751004327b2fcae15ba3e8791990760697fae87edb397b

See more details on using hashes here.

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

Hashes for aiorediscache-4.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 25a9711a0b9d7c123d5232dcc522043bea9d39db661587ada339572f5e124d8b
MD5 67ca2154117d3324d6148eceeb8927c5
BLAKE2b-256 c34ccd685babef80f3778db3c9b9668f93573c9bb472c9c837a53ddf19d669bf

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page