Можно ли кэшировать одно значение в функциях Azure без каких-либо негативных последствий? - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть функция Azure на таймере, который активируется каждую минуту, который вызывает API, который возвращает целочисленное значение.Я сохраняю это значение в SQL.

Затем у меня есть другая функция Azure, к которой пользователь может запросить целочисленное значение.Теоретически этот запрос может достигать сотен или тысяч раз в секунду.

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

Это просто случайстатическая переменная внутри функции для кэширования значения, а другая с последней найденной датой?Или есть другой тип кэширования, который я могу использовать внутри функции?

Я понимаю, что есть решения, такие как Redis, но они кажутся излишними, если их использовать только для одного целочисленного значения.Я также даже не уверен, что сам SQL Azure кеширует значение при запросе.

Мой вопрос: будет ли работать статическая переменная (если она пуста или сброшена, мы просто выполним быстрый запрос SQL)?чтобы получить значение) и на самом деле упорствовать?Или существует такая альтернатива, как redis или аналогичная, которая не будет чрезмерной для этого приложения?И, наконец, есть ли какой-то вред (проблемы с производительностью) при повторном использовании SQL для извлечения одного значения (т. Е. Достаточно ли он умен для кеширования, чтобы не было значительного снижения производительности по сравнению с запросом переменной в памяти)?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

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

Главное - , вы не можете аннулировать кэш. Так, например, если ваш номер изменится, он может быть недоступен для вас.У вас будут случаи, когда контейнер для вашей лазури вращается и имеет старое значение.Один и тот же пользователь может получать разные значения при каждом запросе, потому что кто знает, какой экземпляр он ударит, и что этот экземпляр кэширует.Если ваш номер - это то, что устанавливается только один раз и не изменяется, у вас нет этой проблемы.

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

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

Чтобы ответить на ваш вопрос sql, да, скорее всего, SQL-сервер тоже его кеширует, но вашей функции azure все еще нужно установить соединение с сервером sql, выполнить запрос и прервать соединение.

0 голосов
/ 22 февраля 2019

Рекомендации по использованию функций Azure утверждает, что функции должны быть без состояний, а информация о вашем состоянии должна быть с данными.Я думаю, что Redis все еще лучший вариант, чем SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...