как кешировать данные пользователя в партиале в mvc - PullRequest
10 голосов
/ 14 февраля 2011

В заголовке каждой страницы я показываю имя пользователя и очки пользователя. Это извлекается из частичного (который получает очки из базы данных).

Как я могу кешировать этот фрагмент, чтобы на каждой странице не приходилось проверять базу данных на предмет баллов пользователей, и через 24 часа она снова может выглядеть (срок действия кэша истекает). Также, если пользователь выходит из системы, а кто-то другой входит в систему, будет отображаться новое имя пользователя и точки (не ранее кэшированные).

Ответы [ 3 ]

2 голосов
/ 14 февраля 2011

Это зависит от пользователя, поэтому я бы сохранил его в постоянном файле cookie.Поэтому, когда пользователь аутентифицируется, вы можете запросить базу данных, чтобы получить необходимую информацию и создать постоянный файл cookie, срок действия которого истекает через 24 часа.Затем в частичной части вы проверяете, существует ли cookie, и извлекаете необходимые данные из этого cookie и, если cookie не существует, запрашивают базу данных и повторно отправляют cookie.Когда пользователь выходит из системы, вы можете удалить cookie, хотя в этом нет особой необходимости, поскольку при повторном входе в систему (с тем же или другим именем пользователя) вы снова запрашиваете базу данных и повторно отправляете cookie.

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

1 голос
/ 14 февраля 2011

Как отметил Дарин, локальное хранилище может быть вариантом, но файлы cookie поддерживаются более широко, и механизм резервирования наверняка сработает.

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

Если вы используете ORM, например NHibernate, явное кэширование в приложении, вероятно, не является чем-то, о чем вам нужно сильно беспокоиться, поскольку данные будут кэшироваться поставщиком кэширования ORM (доступны локальные или распределенные опции).

Поскольку это зависит от пользователя, другой вариант - сохранить эту информацию на стороне сервера состояния сеанса, когда пользователь аутентифицируется (который может дополнительно использовать cookie).

0 голосов
/ 14 февраля 2011

Вы имеете в виду: «Я не хочу писать один и тот же код в каждом действии, чтобы загрузить мои пользовательские данные и передать их в представление, которое вместо этого отобразило бы частичное представление»?

Если да, то измените RenderPartial на RenderAction и добавьте туда свою логику для получения статистики пользователя из БД.

Но этот код будет выполняться каждый раз, когда пользователь запрашивает страницу.

Возможно, вы захотите поместить значения в HttpCache (http://msdn.microsoft.com/en-us/library/aa478965.aspx), чтобы вам не приходилось переходить в db для каждого запроса.

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