Что в этой схеме надо поменять?
выкинуть редис?
Обычно редис используют для кеширования. В редисе есть смысл хранить холодные данные, выборка по которым занимает много времени/ресурсов, а изменения наступают достаточно редко. Хороший пример - лента новостей, данные выбранные в ленту актуальны примерно 5 минут, что позволяет делать запросы в бд 1 раз в 5 минут, а не 50 раз в секунду.
В случае чата данные достаточно горячие, и смысл хранить их в редис пропадает, кроме того, обычно чат менее нагружен, так как общаться будут "не только лишь все, но только немногие" из пользователей. Выборка из таблиц чатов будет менее объемной и более быстрой, по этому особого смысла в кешировании нет, так как важно держать данные актуальными.
А, ну и еще, при сбое сервера все данные в редисе будут потеряны, по этому там можно держать только данные полученные из бд или другого источника постоянного хранения.