Metadata-Version: 2.4
Name: simple-redis-cache
Version: 0.3.0
Summary: A library that simplifies working with Redis in Python
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: redis>=8.0.1
Dynamic: license-file

# simple-redis-cache

[![PyPI](https://img.shields.io/badge/PyPI-simple--redis--cache-3776AB?logo=pypi&logoColor=white)](https://pypi.org/project/simple-redis-cache/)
[![Redis](https://img.shields.io/badge/Redis-8.0-DC382D?logo=redis&logoColor=white)](https://redis.io/)
[![uv](https://img.shields.io/badge/uv-0.6-blue?logo=python&logoColor=white)](https://github.com/astral-sh/uv)
[![Pytest](https://img.shields.io/badge/Pytest-9.1-blue?logo=pytest&logoColor=white)](https://pytest.org/)
[![Отчёт о покрытии](https://img.shields.io/badge/Отчёт_о_покрытии-онлайн-8A2BE2?logo=github-pages&logoColor=white)](https://hotpotato89.github.io/simple-redis-cache/coverage/)

Простой инструмент для кэширования асинхронных и синхронных функций в Redis.

## Особенности

- **Автоматическая генерация ключей** — ключи создаются на основе имени функции и аргументов
- **Инвалидация по префиксу** — очищайте кэш группами
- **Кастомный JSON-энкодер** — поддерживает `datetime`, `Decimal`, `UUID`, Pydantic-модели
- **Устойчивость к ошибкам** — ошибки Redis не ломают приложение
- **Гибкая настройка** — можно передать свой логгер
- **sync/async поддержка** — можно использовать как для **синхронных**, так и для **асинхронных** функций
- **100% покрытие** - полная уверенность в коде



## Установка

```bash
pip install simple-redis-cache
```

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

```python
from simple_redis_cache.sync import Cache  # Синхронный
```

```python
from simple_redis_cache.asyncio import Cache  # Асинхронный
```

## Пример

```python
from redis.asyncio import Redis
from simple_redis_cache import Cache

redis = Redis()
cache = Cache(redis)

@cache.cache(ttl=60, prefix="user")
async def get_user(user_id: int):
    return {"id": user_id, "name": "Alice"}

# Первый вызов — вычисляется, второй — из кэша
r1 = await get_user(1)
r2 = await get_user(1)

# Одинаковый результат
print(r1 == r2)
```

## Инвалидация
```python
await cache.invalidate_cache(prefix="user")
```

## Лицензия
[**MIT**](LICENSE) 
## Автор
[**hotpotato89**](https://github.com/hotpotato89)
