ASP.NET Кэширование с переменной Session? - PullRequest
1 голос
/ 25 октября 2009

У меня есть какой-то сайт сообщества, в базе данных около 40.000 пользователей со многими столбцами свойств. Есть две страницы, на которых отображаются последние и онлайн-пользователи, основываясь на каких-то критериях, т.е. пол.

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

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

Приветствия

Ответы [ 2 ]

1 голос
/ 27 октября 2009

Вы говорите, что не можете использовать кэширование вывода, потому что вы используете специфические для пользователя данные для генерации вывода. Но вы также можете использовать кеш программно для хранения объектов, к которым вы обращаетесь, в коде файла (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);

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

0 голосов
/ 25 октября 2009

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

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