Кэш данных и объект сеанса в ASP.Net

Должны ли храниться динамические бизнес-объекты для сайта в сеансе пользователей или использовать кэширование ASP.Net(такие объекты, как заказы, информация профиля и т.д.)?

Я работал с сайтами, которые использовали сеансы для хранения бизнес-объектов, но мне было интересно... Каковы преимущества или недостатки кеширования?

Ответ 1

Если объекты разделяются между сеансами пользователя, используйте кеш. Если объекты уникальны для каждого сеанса, возможно, потому, что они управляются разрешениями, а затем сохраняйте их в сеансе. Сам процесс in-process хранится в кеше, поэтому решающим фактором действительно должна быть область данных.

Ответ 2

Кэширование - это просто кеширование. Вы никогда не можете опираться на записи, поэтому нет никаких предположений в этом отношении: будьте готовы перейти непосредственно к БД (или где-либо еще), чтобы восстановить данные.

С другой стороны, сеанс больше подходит для хранения объектов, хотя лично я стараюсь избегать хранения сеанса в пользу БД. Обычно я делаю это, абстрагируя хранилище за непрозрачным интерфейсом ISessionStoreService:
interface ISessionStore
{
    T GetEntry<T>(string key);
    void SaveEntry<T>(string key, T entry);
}

а затем "соответствующая реализация зависимостей", будь то InmemorySessionStore, DbSessionStore или что-то еще.

Ответ 3

Системный кэш ASP.NET является глобальным для приложения, где сеанс уникален для текущего пользователя. Если вы решили использовать глобальный кеш для хранения объектов, вам нужно будет создать стратегию идентификации объектов, чтобы вы могли получить правильные объекты для своих пользователей.

Если вы хотите повысить производительность, вам лучше было бы заменить состояние сеанса ASP.NET кешем распределенной памяти, таким как скорость Microsoft. Microsoft опубликовала статьи о том, как заменить использование сеанса на целевую скорость. Вы также можете использовать Memcache или другие аналогичные продукты соответствующим образом.

Ответ 4

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

Session = > Веб-страница с пошаговым интерфейсом (например, онлайн-тест).
Cache = > Информация, отображаемая в виде своего рода виджета погоды (например, того, что у Google на странице igoogle.com).
Надеюсь, это поможет.

Ответ 5

Хотя вы можете сохранить свой бизнес-объект в кеше, но Cache предназначен для повышения производительности, а не для управления штатами. Представьте, что у вас есть процесс получения 1000 записей из базы данных (и это занимает около 3 секунд), и вам понадобится это на несколько минут. Вы можете хранить свои объекты в кеше и устанавливать дату истечения срока действия, приоритет и зависимость от него (например, SqlDependency или FileDependency), поэтому для следующих запросов вы можете использовать данные Cached вместо их извлечения из базы данных. Вы можете сохранить свой объект в сеансе, но вы не можете установить зависимость для сеанса по умолчанию. Также у Cache есть уникальное поведение, которое, когда система нуждается в памяти, будет освобождать объекты из кеша в зависимости от его приоритета. Объекты кэша являются глобальными для Приложения и распределяются между всеми пользователями, но сеанс не используется совместно и используется для каждого пользователя (сеанса).