2009-10-25 2 views
1

У меня есть какой-то сайт сообщества, в базе данных около 40 000 пользователей со многими столбцами свойств. Есть две страницы, на которых показаны последние и онлайн-пользователи на основе каких-то критериев, т.е. Пол.ASP.NET кэширование с переменной сеанса?

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

Как бы вы решили эту проблему? Я знаю несколько способов, но некоторые ребята здесь получили большой опыт, поэтому я жду ввода. Я думаю, что это распространенная проблема для тех, кто сделал или делает приложение со многими пользователями в нем. Может быть, команда StackOverflow ???

Приветствия

ответ

1

Вы говорите, что вы не можете использовать выходное кэширование, потому что вы используете пользовательские данные для генерации вывода. Но вы также можете использовать кэш программно для хранения объектов, которые вы посещаете в код файла (HttpContext.Cache)

Таким образом, вы могли бы написать что-то вроде этого (псевдо-код) в коде позади файла:

var cacheableUserData = (UserData)Cache("UserData"); 
if (cacheableUserData== null) 
{ 
    cacheableUserData= GetDataFromDB(); 
    Cache.Add("UserData", cacheableUserData); // Set cache expiration here 
} 
var dataToPresent = CombineData(userData, loggedInUserData); 

Тогда вы не кэшируете выход, а часть данных, которые используются для генерации вывода.

-1

Почему бы не использовать HttpContext.Items свойство хранить его в так хранится глобально, а не локально (IE: HttpContext.Session)?

+0

Я хранил там userID, userAge и несколько других полей. Как спасет их в глобальном масштабе? – eugeneK

+0

Я действительно не понимаю проблему ...: S О, после некоторого чтения. Вам необходимо кэшировать переменные сеанса. Кэширование по умолчанию по умолчанию не повлияет на сеанс, если вы не используете пользовательский материал в элементе управления, обработанном с помощью outputcache. –

+0

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

Смежные вопросы