Наличие общедоступного контроллера, которому вы можете позвонить, чтобы сказать сайту очистить свой кеш, будет работать до тех пор, пока у вас есть только один экземпляр основного сайта. Как только вы добавите второй экземпляр, когда вызовы будут проходить через балансировщик нагрузки, ваш единственный вызов перейдет только к одному экземпляру.
Если вас не беспокоит то, как скоро обновление будет сделано с сайта администратора до основного сайта, наиболее эффективным и простым (но не самым дешевым) решением является использование Azure AppFabric Cache а затем настройте его для использования локального (в памяти) кэша с коротким временем ожидания (скажем, 10 минут).
В первый раз, когда ваш клиент пытается получить доступ к элементу, это будет то, что происходит
- Поиск предмета в локальном кеше
- Его там нет, поэтому ищите элемент в распределенном кеше
- Его там тоже нет, поэтому загрузите элемент из постоянного хранилища
- Добавить элемент в кеш с длительным сроком службы (я думаю, 48 часов по умолчанию)
- Возврат товара
Шаги 1 и 2 позаботятся о вас библиотекой, остальные биты нужно записать. Любые последующие вызовы в следующие X минут вернут элемент из кеша в памяти. Через X минут он выпадает из локального кэша. Следующий вызов загружает его из распределенного кэша обратно в локальный кеш, и вы можете продолжить.
Все, что нужно вашему приложению администратора, - это обновить базу данных, а затем удалить элемент из распределенного кэша. В следующий раз, когда элемент выпадет из локального кэша на клиенте, он просто перезагрузит данные из базы данных.
Если вам нравится эта идея, но вы не хотите тратить деньги на использование службы кэширования, вы можете сделать что-то очень похожее на вашу идею базы данных. Храните кэшированные данные в статической переменной и просто проверяйте наличие обновлений каждые x минут, а не при каждом запросе.