#asp.net-mvc-3
#asp.net-mvc-3
Вопрос:
Я создаю анкету, и я хочу сохранить количество вопросов, которые пользователь заполнил, и количество доступных вопросов. Я знаю, как вычислить эти значения, но я не хочу проходить через базу данных каждый раз, когда пользователь запрашивает страницу, которая показывает эту информацию (что происходит довольно часто).
Я рассматривал возможность сохранения этого в сеансе, но проблема в том, что сеанс истекает до аутентификации, поэтому информация может быть потеряна, но пользователь все равно войдет в систему.
Есть какие-нибудь предложения?
РЕДАКТИРОВАТЬ: я забыл упомянуть, что я работаю на сервере, где я не могу указать время ожидания сеанса самостоятельно. Кроме того, количество вопросов с ответами должно обновляться, когда пользователь отвечает на вопрос.
Комментарии:
1. класс кэша работает независимо от времени ожидания сеанса — смотрите ссылки в моем ответе…
Ответ №1:
сеанс обычно продлевается каждый раз, когда делается запрос на сервер, поэтому, пока кто-то использует анкету, периодически отправляйте запрос на сервер, используя JavaScript, просто чтобы убедиться, что сеанс не завершен.
Ответ №2:
Вы могли бы рассмотреть возможность увеличения времени ожидания сеанса.
Ответ №3:
Очень интересный ресурс о кэшировании и ASP.NET является http://msdn.microsoft.com/en-us/magazine/gg650661.aspx
Поскольку вы не можете указать время ожидания сеанса, используйте Cache
класс — он поддерживает несколько разных механизмов для удаления кэшированного элемента…
РЕДАКТИРОВАТЬ — согласно комментарию:
С кэшем вы должны реализовать схему «сквозной записи», то есть всегда обновлять как кэш, так и БД, что означает, что кэш всегда правильный и любое чтение никогда не попадает в БД после начальной загрузки при запуске приложения.
Другой вариант — обновить базу данных и аннулировать элемент кэша … при следующем доступе на чтение вы получаете «промах кэша» и обрабатываете это, нажимая на DB и сохраняя результат в кэше … таким образом, вы обращаетесь к DB для чтения в worstcase так же часто, как и для записи… этот шаблон помогает только в том случае, если у вас намного больше операций чтения, чем записи…
Комментарии:
1. Когда количество вопросов с ответами обновляется (пользователь ответил на новый вопрос), кэш больше недействителен. Как бы вы обновили ее?
2. @Kenci как и в случае с каждым кэшем, вы должны реализовать схему «сквозной записи» (т. Е. всегда обновлять как кэш, так и БД).
3. @Kenci другой вариант — просто аннулировать кэшированное значение при обновлении и при следующем доступе для чтения проверить последовательность (если ее там нет, просто загрузите ее в кэш) и т.д.
4. Мне нравится ваш ответ и ваши усилия! Я не сохраняю количество вопросов, на которые даны ответы в базе данных, а вычисляю его, просматривая каждый вопрос, чтобы увидеть, были ли даны ответы на все варианты ответов, а затем суммирую все это. Поскольку у меня есть много вопросов и возможностей для ответов, это потребовало бы большого количества обращений к базе данных, что является AFAICS, чего потребовала бы схема сквозной записи. Я хочу получить число один раз, когда пользователь входит в систему, а затем обновить его в памяти. Я думаю, что соглашусь с ответом @Kae Verens, но спасибо за помощь. И поправьте меня, если я ошибаюсь.