Кэширование как для Angular, так и для ASP .NET MVC

Фон

В моем проектном приложении было интегрировано множество небольших приложений, и в них встроены различные технологии, такие как

  • Угловой JS 1.5
  • ASP.Net MVC
  • Угловой 5

Мое приложение также использует AWS в качестве облачного партнера.

Проблема

Мне нужно реализовать механизм Кэширования в моем приложении. Я храню некоторые значения в корзине S3 и использую вызовы API для извлечения значений. Я хочу сохранить эти значения в кеше. Поскольку он реализован в нескольких технологиях (особенно в Angular и ASP.Net MVC), можно ли использовать какой-либо общий механизм кэширования?

Наблюдения

Я проделал некоторую работу над этим и заметил, что доступно следующее кэширование

  1. .NET MVC — кэширование в памяти
  2. Angular — в кеше памяти с ReactJS

Поскольку AWS является моим облачным партнером, он предлагает ElastiCache в качестве веб-сервиса, который поддерживает MemCached и Redis. Мне не ясно, будет ли это вести себя как обычный кэш в памяти (в ASP .NET Core) или это будет ссылаться на базу данных для кэширования и извлечения деталей (вызывать туда и обратно!) оттуда?

Вопрос

Может ли кто-нибудь сообщить мне, что лучший метод кэширования может быть применен к моему приложению как для .net mvc, так и для angular?


person Viswa    schedule 30.05.2018    source источник


Ответы (1)


Это немного сложно (я предполагаю, что вы используете несколько серверов memcache). Когда вы используете memcache, многое зависит от реализации клиентов. Ваш клиент решает, на каком сервере будет храниться тот или иной ключ. И серверы не знают о существовании других серверов.

Поскольку вы используете разные языки, вы будете использовать разные клиенты, поэтому каждый клиент будет реализовывать свой собственный алгоритм для выбора сервера, на котором будет размещен ключ. Таким образом, будут случаи, когда ваш клиент на Angular будет хранить ключ «K1» на сервере «S1», а клиент .Net будет хранить тот же ключ на сервере «S2».

Это добавит еще одну проблему аннулирования этих ключей, так как потребуется сделать аннулирование ключа на обоих серверах.

Есть еще одна проблема. Вам придется хранить все объекты в формате json, если ключи общие. Так что ключи, хранящиеся на одном сервере memcache, будут читаться всеми языками программирования.

Я думаю, что лучше всего установить достаточно малое время для аннулирования ключей в кэше памяти (если это возможно) и хранения ключей с разными префиксами или суффиксами для каждого типа клиента. Таким образом, клиент .net сохранит ключ K1 как «K1-net», а клиент с Angular сохранит его как «k1-ang».

Я бы также изучил Redis, который может помочь (не уверен)

person pratikvasa    schedule 31.05.2018
comment
Спасибо за обновление Pratik. В моем приложении мы будем хранить ключи уникальным образом. Таким образом, .net и angular НЕ будут иметь одинаковые ключи. Я также думаю о переходе на централизованный или распределенный кеш. Кроме того, мой ответ хранилища данных находится в формате JSON, поэтому кеш будет хранить объекты только в формате JSON. Теперь, какой выбрать? MemCached или Redis. Что касается MemCached или Redis, у вас есть какие-либо идеи о том, как подключиться к .net и угловому приложению? - person Viswa; 31.05.2018
comment
Для .Net вы можете использовать кеш enyim, а для angular я не уверен, но это должно помочь npmjs.com/package/memcached - person pratikvasa; 01.06.2018
comment
Именно то, что я проанализировал, что вы обновляете! На данный момент у меня нет другой возможности перейти на Redis, так как нет подключаемого модуля для angular. Но с другой стороны, MemCached имеет какое-то отношение. попробую это. - person Viswa; 01.06.2018