Простая система оповещений пользователя о входящих уведомлениях. Есть булевое значение, в зависимости от значения которого будет выполняться/не выполняться запрос в основную БД по поиску входящий уведомлений. Кроме основной есть еще redis в которой живут сессии пользователя. Поле is_notified есть и в таблице user основной БД и добавляется в сессию пользователя при авторизации.
В проекте используется фреймворк fastAPI, создана middleware которая при каждом запросе будет чекать значение поля is_notified , и если оно в True то идти в БД за сообщениями. Вопрос в какую БД ходить за актуальным статусом правильнее в соответствии с желанием исходить из уменьшения запросов в основную БД но и не нарушать общепринятой архитектуры для таких случаев.
1 вариант - хранение в сессиях
При авторизации пользователя в редисе создается сессия в виде
{'session_id':
"session_data": {
"user_id": 123,
"is_notified": True,
......
}
}
При получении пользователем новых уведомлений is_notified присваивается true. Пользователь заходит на сайт, формируется сессия в которую подтягивается значение is_notified и если оно true то идем в БД за сообщениями.
Но тут проблема. если пользователь онлайн и ему придет уведомление, то нужно изменять значение is_notified в сессии напрямую. Т.е как то делать такую структуру в редисе где для пользователей которые онлайн содержащую матчинг айдишника пользователя и айдишника сессии. По айдишнику сессии вытягивать значение is_notified и менять его.
Это вообще норальный подход?
2 вариант , храним только в основной БД
Тогда миддлваре при каждом запросе будет ходить в БД и чекать значение is_notified. Это лишний запрос в БД при каждом телодвижении пользователя.
Наверняка есть еще варианты. Поделитесь опытом как правильно реализовать?