Воспроизвести сессию фреймворка через клиентские куки - PullRequest
4 голосов
/ 22 июня 2011

В моем приложении я хочу хранить большой объем данных в памяти, относящейся к пользователю, который в данный момент обращается к моему веб-приложению в сеансе для конкретного пользователя.Насколько я знаю, Play Framework использует cookie для хранения данных сеанса, который имеет ограничение 4k.Как я могу иметь гораздо большие данные сеанса?Помогает ли здесь ehacache memcache?Этот сеанс имеет время истечения с последнего действия пользователя.

Ответы [ 2 ]

4 голосов
/ 22 июня 2011

Если данные сеанса кэшируются, лучше хранить их в кэше с ключом в качестве идентификатора пользователя и очищать их, когда пользователь выходит из системы. Загрузите его из БД при обновлении / удалении соответствующей БД. Хранение контента во внешнем кеше, таком как memcache, поможет вам хорошо масштабироваться и позволит вам в случае необходимости перейти к распределенному кешу в долгосрочной перспективе. Проверьте эту интересную статью на Share Nothing .

2 голосов
/ 22 июня 2011

Идея с Play состоит в том, чтобы рассеять необходимость сеанса и хранения большого количества информации в памяти.Проблема с подходом в оперативной памяти заключается в том, что вы привязываете пользователя к определенному серверу, на котором хранятся его данные, тогда как подход с воспроизведением без участия означает, что вы можете легко масштабировать по горизонтали, не беспокоясь о зависающих сеансах и т. П.

У вас есть следующие варианты: хранить временные данные во временной базе данных, к которой можно получить доступ через userId или другой уникальный идентификатор пользовательского сеанса.Эта база данных будет эквивалентом вашего сеанса на стороне сервера.использовать кеш.Однако идея кеша состоит в том, что если информация не находится в кеше, она может быть взята из базы данных (или другого источника).Кеш не должен гарантировать, что данные будут доступны.Если в случае кэша в памяти (например, ehcache), если у вас есть набор серверов с балансировкой нагрузки, вы не сможете гарантировать, что все запросы возвращаются на один и тот же сервер, поэтому данные в кэше могут быть недоступны навсе серверы для определенного сеанса.

Ответ на ваш вопрос зависит от вашего варианта использования, но я думаю, что база данных - ваш лучший подход, основанный на предоставленной вами информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...