https://github.com/comtura-ai/fastapi-redis
Fastapi Redis client with decorator for controllers
https://github.com/comtura-ai/fastapi-redis
fastapi fastapi-redis redis
Last synced: 4 months ago
JSON representation
Fastapi Redis client with decorator for controllers
- Host: GitHub
- URL: https://github.com/comtura-ai/fastapi-redis
- Owner: comtura-ai
- License: mit
- Created: 2022-01-30T23:57:57.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2022-06-30T13:11:59.000Z (almost 4 years ago)
- Last Synced: 2024-11-15T05:09:34.422Z (over 1 year ago)
- Topics: fastapi, fastapi-redis, redis
- Language: Python
- Homepage:
- Size: 39.1 KB
- Stars: 10
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# Fastapi Redis
This package provides a client that integrates with Fastapi and provides a decorator to cache fastapi controllers responses.
## Installation
`$ pip install fastapi-redis`
## Usage
### Client
#### Setting the data
```python
import redis_client from fastapi_redis
redis_client.set('some_key', 'some_data')
```
Models can be saved as well and the client will serialize them to json:
```python
import redis_client from fastapi_redis
from pydantic.main import BaseModel
MyModel(BaseModel):
data: str
redis_client.set('some_key', MyModel(data='some_data'))
redis_client.set('some_key', MyModel(data='some_data_that_expires'), expiration=timedelta(days=1))
```
The data can be saved using the [Fastapi Background Tasks](https://fastapi.tiangolo.com/tutorial/background-tasks/) so it wouldn't generate any delay on the response to the user:
```python
import redis_client from fastapi_redis
@router.get('/')
async def my_controller_method(background_tasks: BackgroundTasks):
redis_client.set_in_background(background_tasks, 'some_key', 'some_data')
redis_client.set_in_background(background_tasks, 'some_key', MyModel(data='some_data_that_expires'), expiration=timedelta(days=1))
```
#### Getting the data
```python
import redis_client from fastapi_redis
some_data = redis_client.get('some_key')
```
### @redis_cache decorator
The `@redis_cache` decorator can be used to cache the response from a controller. Any argument of the controller can be used to specify the key of the data to store and if `background_tasks: BackgroundTasks` is defined as an argument it will store the data in the background as well:
```python
import redis_client from fastapi_redis
@router.get('/resource/{id}')
@router_cache('resource_{id}_{user.id}', timedelta(days=1))
async def my_controller_method(id: str,
user: User = Depends(get_current_user)
background_tasks: BackgroundTasks):
return some_data_that_will_be_cached
```
#### Reset data
Sometimes you want to reset what's on the cache and reprocess the response of the method/function/api without waiting for the timeout, these can be archieved sending the variable `reset_cache` to the `@router_cache()` decorator:
```python
import redis_client from fastapi_redis
@router.get('/resource/{id}')
@router_cache('resource_{id}_{user.id}', timedelta(days=1))
async def my_controller_method(id: str,
reset_cache: str = None,
user: User = Depends(get_current_user)
background_tasks: BackgroundTasks):
return some_data_that_will_be_cached
```
This way when the user sends to this url the query parameter `?reset_cache=true` it will reprocess the data and cache it again.