Metadata-Version: 2.3
Name: redis-distlock
Version: 1.0.1
Summary: Async distributed locks and concurrency control for Redis
Author: Aleksandr Yurlov
Author-email: Sasha.yur@mail.ru
Requires-Python: >=3.11,<4.0
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Requires-Dist: redis (>=5.0.0,<6.0.0)
Description-Content-Type: text/markdown

# redislock

Async библиотека для distributed locks и concurrency control через Redis.

## Возможности

- **Distributed Locks**: Блокировки через Redis для координации между процессами/серверами
- **Concurrency Limiting**: Ограничение количества одновременных операций
- **Registry Pattern**: Удобное управление через `register()` и `get()`
- **Async/Await**: Полная поддержка asyncio
- **Context Managers**: Автоматическое освобождение ресурсов

## Установка

```bash
poetry add redislock --path /Users/aleks/Libraryies/redislock
```

## Использование

### Инициализация

```python
import red_mng
from redislock import register, get

# Регистрация
redis = red_mng.get("default")
register("default", redis)

# Получение
locks = get("default")
```

### Distributed Locks

```python
# Защита критической секции
async with locks.acquire("orderbook:BTCUSDT:binance"):
    # Только один процесс выполнит этот код
    await update_orderbook()

# С кастомными таймаутами
async with locks.acquire("resource", timeout=10, blocking_timeout=20):
    await critical_operation()
```

### Concurrency Limiting

```python
# Ограничение параллельных API запросов
async with locks.limiter("api_calls", limit=50):
    await make_api_call()

# Ограничение обновлений orderbook
async with locks.limiter("orderbook_updates", limit=100):
    await update_orderbook()
```

## Интеграция с проектом

```python
from redislock import get
from config_fastapi import Config
import red_mng as redis_manager

class BaseRedisControl:
    def __init__(self):
        config = Config(section="redis")
        self.redis = redis_manager.get(config.get("alias"))
        self.locks = get(config.get("alias"))
```

## Архитектура

- `DistributedLock`: Использует `redis.asyncio.lock.Lock`
- `ConcurrencyLimiter`: Использует `asyncio.Semaphore`
- `LockManager`: Unified interface для обоих
- Registry pattern: Singleton per alias

## Преимущества

✅ Работает в распределенной среде (несколько серверов)
✅ Автоматическое освобождение блокировок
✅ Настраиваемые таймауты
✅ Логирование через `logging`
✅ Type hints
✅ Минимальные зависимости
