У меня есть следующий код Python:
import redis
from app.infra.services.notifications import INotifier
from app.schemas.notification import NotificationMessage
from app.config import settings
REDIS_CLIENT_PUBSUB = redis.StrictRedis(
host=settings.REDIS_HOST,
port=settings.REDIS_PORT,
password=settings.REDIS_PASSWORD,
)
class RedisNotifier(INotifier):
def __init__(self):
self.redis_client = REDIS_CLIENT_PUBSUB
async def send_notification(self, room: str, notification: NotificationMessage) -> None:
await self.redis_client.publish(room, notification.json())
redis_notifier = RedisNotifier()
У меня есть веб-приложение, написанное на FastAPI, которое будет использовать redis_notifier для публикации сообщений в каналах. Мой вопрос в том, действительно ли это: self.redis_client.publish(комната, Notification.json()) Это асинхронно, то есть мое веб-приложение сможет отказаться от этой сопрограммы и заняться другими делами, пока публикация не будет завершена? Меня немного запутала библиотека redis и aioredis, я не знаю, имеет ли мой код смысл или я делаю что-то не так






Redis здесь синхронен, что означает, что он блокирует выполнение вашего кода до тех пор, пока он не завершит операцию.
Вы можете использовать aioredis. или асинсио-редис
https://aioredis.readthedocs.io/en/latest/
https://pypi.org/project/asyncio-redis/
ДА, определенно подойдет asyncio-redis (и он интегрирован в библиотеку Redis)
Последняя версия aioredis — 2.0.1, выпущенная в декабре 2021 года. aioredis был объединен с redis-py 4.2.0rc1+, поэтому его можно получить при стандартной установке redis-py.
Найдите примеры здесь https://redis-py.readthedocs.io/en/stable/examples/asyncio_examples.html
Как сейчас написано, ваш ответ неясен. Пожалуйста, отредактируйте , чтобы добавить дополнительную информацию, которая поможет другим понять, как это относится к заданному вопросу. Более подробную информацию о том, как писать хорошие ответы, вы можете найти в справочном центре.
Я читал, что теперь aioredis является частью библиотеки Redis, вы что-нибудь об этом знаете?