Грамотное кэширование в NodeJS проекте
Планируется highload-проект с использованием NodeJS, MySQL, Redis, NGINX.
За основу взят nodejs фреймворк express, и для работы с сокетами (может это и не хорошее решение) socket.io. Проект представляет собой Single page application, предполагается что сокет-соединение будет открыто повсеместно. Будет большое количество страниц, которые являются статистично-информативными, и не щадят бд тяжелыми запросами.
Собственно ближе к делу, есть несколько вопросов и том как построить кэширование данных и где лучше применять Redis, а где использовать другие способы.
1. Например, есть запрос к БД, результат его мы можем сохранить в Redis в виде JSON, при следующих обращениях уже будем брать его из redis и когда необходимо - делать инвалидацию данного кэша. - На сколько правильно это? и стоит ли именно в JSON хранить данные?
2. Нам иногда нужна закешерованная страница не только в JSON, а кусок или целяком HTML. - Правильно ли, хранить эти куски в redis?
3. Есть идея реализовать session-storage в redis, как это сделать правильно? например ключом будет id сессии, а значением - массив данных о клиенте. - Это правильно или нет? как лучше будет?
4. В каких случаях стоит записывать кэш в файлы на диск?
5. Стоит ли вообще пихать все что выше описано в redis?
Я не имею опыта в highload, поэтому мне интересно все что вы скажете, очень нужны грамотные советы в построении проекта на перечисленных компонентах. Может есть какие-то рекомендации по работе с сокетами в highload, либо еще что-то, что касается основ такого проекта.
Признателен за ваши полезные советы, благодарю за внимание!
|