Кеширование всех пользователей в ASP.NET
Я работаю над веб-приложением в ASP.NET/C#, которое должно быть масштабируемым для обработки высокой пользовательской нагрузки (возможно, будет работать в веб-ферме). Так как это будет обслуживать большое количество пользователей, около 1 миллиона плюс, но количество онлайн-пользователей будет около 30K-50K. Я планирую использовать кэширование (на основе провайдера), и мне было интересно:
Это хорошая идея, чтобы кэшировать ВСЕХ пользователей для производительности? Я планирую кэшировать все другие общие данные, такие как настройки и т. Д., Но насколько эффективно будет кэшировать ВСЕХ пользователей в памяти? Если пользователь изменяет свой профиль, я перезагружу только этого конкретного пользователя в кеше (имея коллекцию всех пользователей). Есть предложения по этому подходу?
Нужно ли беспокоиться о блокировке при использовании вышеупомянутого кеша пользователей? Только один пользователь может редактировать профиль, это будет одна атомарная операция, хотя в разных потоках будет несколько операций чтения. Так что, при извлечении пользователей из кэша или обновлении конкретного пользователя я должен использовать блокировку?
Спасибо
Как будто
2 ответа
Помещение в Global Cache всего, что полезно только для одного пользователя, обычно является плохой идеей и снижает производительность. Оптимизируйте запросы к базе данных, и вы будете в гораздо лучшей форме.
Как правило, вы должны хранить в кэше только те вещи, которые дорого получать из базы данных, и более чем один пользователь захочет видеть эту информацию одновременно. Например, список 100 лучших продуктов или что-то в этом роде. Небольшие объемы данных, которые относительно дешево получить из базы данных и которые полезны только одному человеку, должны оставаться там, где они есть.
Кэширование значительно увеличивает сложность, и тем более в веб-ферме. Не вводите ненужных сложностей, если только вам это не нужно. Подождите, пока у вас не возникнет реальная проблема с производительностью, прежде чем пытаться ее решить.
Кэширование пользователей, вероятно, хорошая идея. Но это зависит от того, сколько данных вы собираетесь кэшировать для каждого пользователя, а также от стоимости извлечения этих данных из любого места, где они хранятся.
Для блокировки - может ли кто-нибудь еще редактировать профиль пользователя (например, admininstrator)? Будет ли это обычным явлением? Если это так, вы можете сделать некоторые блокировки. Иначе, если бы только пользователь мог редактировать свои собственные вещи, я бы не стал беспокоиться.