Хобрук: Ваш путь к мастерству в программировании

Можно ли постоянно кэшировать некоторые результаты API в Redis?

Некоторые API (которые могут увеличиться примерно на 1000000 * количество пользователей), и каждый из них имеет только 1 целочисленное значение, требуют очень много времени, поэтому я решил кэшировать их в Redis, но я обнаружил, что если у меня есть механизм истечения срока действия, поэтому я должен вернуться к mysql для получения результата каждый раз, когда у Redis нет результата. (на самом деле случай нулевого результата более вероятен, чем наличие целочисленного значения, по крайней мере, в начале проекта, поэтому, если я не буду хранить нулевые значения, приложение много раз попадет в mysql для нулевых значений.)

Поэтому я решил использовать Redis в качестве «растущего кеша». Это означает, что я должен постоянно сохранять все ненулевые (или не нулевые) значения в Redis. Я сомневаюсь, это хорошая практика или мы должны выбрать Redis в качестве временного кеша с механизмом истечения срока действия?


Ответы:


1

ну, вы не можете держать постоянно растущий редис, так как у вас ограниченный объем памяти. Поэтому я бы посоветовал предпринять следующие шаги:

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

Я не очень понимаю вашу проблему с нулевыми значениями в начале, потому что кажется, что вам все еще нужно выполнять вызов приложения хотя бы один раз для каждого запроса в начале процесса, я не понимаю, как вы могли бы этого избежать (наличие 0 в Redis приведет к тому, что ответ всегда будет 0 и никогда не вызовет фактическое приложение, верно?)

11.05.2015
  • мы храним только нулевые значения в redis и не сохраняем нулевые значения во время операций записи, а не операций чтения (мы используем redis как денормализованные данные, а не кеш, и каждый раз, когда что-то меняется, мы обновляем связанные денормализованные данные в redis) 12.05.2015
  • насколько я знаю, у Redis есть функция горизонтального масштабирования (кластеризация), поэтому мы можем использовать несколько узлов для обработки ограничений памяти. 12.05.2015
  • вам очень нужно изучить потребность в памяти, возможно, она на удивление мала... 13.05.2015
  • Новые материалы

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..