Key-value storage: memcached, Redis для этих задач. а использовать Websockets необходимо начинать тогда когда вам надо начать получать события с сервера
Каждому решению своя база данных. Надо смотреть на проект в целом и как всё будет коммуницировать. Будет ли архитектура микросервисная или монолитная? Будет ли SPA или SSR?
для этого обычно используют blue-green deployment. запускается новый инстанс проекта и потом на него переключается трафик. А вы пробуете решить эту задачу как типичный разработчик своими силами
Самый лёгкий способ запустить бэк для фронта на Vue или react это сделать Rest API, а дальше по сложности - websockets, graphQL. Все это есть, например, в AWS: API gateway, lambda, app sync . Даже сервер настраивать не придется
Вы не поверите, но mysql умеет и кэширует запросы. Но в вашем случае либо проблема в таблице (индексы), либо в данных (если там text то прощай индексация). В любом случае прочитайте explain и если там нет проблем или вас ничего не смутило - кэшируйте результаты в memcached, например, самостоятельно
При логине в комнату посылать сообщения, которые не были доставлены, например. Сервер же знает что пользователь соединился и может запустить цепочку поиска и досылки сообщений
Перестать заниматься фигней, вспомнить что белые люди не отправляют сообщения в очереди, а делают это через exchange и собрать соответствующий mapping multiple exchanges - one queue
Если у вас проект чисто в виде API, то посмотрите на AWS, Azure. У них с этим все прекрасно и на старте вы вряд-ли вообще что-то заплатите (если не полезете куда не стоит)
Введи регистрацию и после логина выдавай пользователю токен, который будет послан в WS при подключении, например, соответствующим сообщением {"action":"authenticate", "token":"dsdsfsdfsdfsdfsdfs"}