Кэширование всех пользователей в ASP.NET

Я работаю над веб-приложением в ASP.NET/C#, которое должно быть масштабируемым для обработки высокой нагрузки пользователя (вероятно, будет работать в веб-ферме). Поскольку он будет обслуживать большое количество пользователей, около 1 миллиона плюс, но количество онлайн-пользователей будет около 30K-50K. Я планирую использовать кеширование (основанный на провайдерах) и задавался вопросом:

  • Хорошо ли кэшировать ВСЕ пользователей для производительности? Я планирую кэшировать все другие общие данные, такие как настройки и т.д., Но насколько эффективно было бы кэшировать ВСЕ пользователей в памяти? Если пользователь меняет свой профиль, я перезагружаю только этого конкретного пользователя в кеш (имея коллекцию всех пользователей). Любые предложения по этому подходу?

  • Нужно ли беспокоиться о блокировке при использовании этого кеша выше пользователей? Только одно редактирование профиля было бы самим пользователем, это была бы одна атомная операция, хотя в разных потоках будет несколько считывающих устройств. Итак, если вы загружаете пользователей из кеша или обновляете пользователя-участника, я должен использовать блокировку?

Спасибо

Асиф

Ответ 1

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

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

Кэширование значительно увеличивает сложность, и тем более в веб-ферме. Не вводите ненужную сложность, если вам абсолютно не нужно. Подождите, пока у вас не возникнет проблема с производительностью, прежде чем пытаться ее решить.

Ответ 2

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

Заблокировать - может ли кто-нибудь еще отредактировать профиль пользователя (например, администратор)? Будет ли это обычным явлением? Если это так, вы можете сделать некоторые блокировки. В противном случае, если бы только пользователь мог редактировать свои собственные вещи, я бы не стал беспокоиться.