hibernate кэш второго уровня с Redis-это улучшит производительность?
в настоящее время я разрабатываю приложение, используя Весна MVC4 с и спящий режим 4. Я реализовал hibernate кэш второго уровня для улучшения производительности. Если я использую Рэдис что такое хранилище структуры данных в памяти, используемое в качестве базы данных, кэша и т. д., производительность увеличится, но будет ли это резкое изменение?
4 ответов
радикальные различия вы можете ожидать, если кэшировать то, что хорошо кэшироваться и избегать кэширования данных, которые не должны кэшироваться вообще. Как красота в глазах смотрящего, так и представление. Вот несколько аспектов, которые вы должны иметь в виду при использовании Hibernate в качестве поставщика кэша второго уровня:
нет пользовательской сериализации-интенсивная память
Если вы используете кэширование второго уровня, вы не сможете использовать быстрые платформы сериализации как Крио и придется придерживаться сериализации java, которая отстой.
кроме того, для каждого типа сущности у вас будет отдельный регион, и в каждом регионе у вас будет запись для каждого ключа каждой сущности. С точки зрения эффективности памяти, это неэффективно.
не хватает возможности хранить и распространять богатый объекты
Большинство современных кэшей также представляют функциональность вычислительной сетки, в которой ваши объекты фрагментированы на множество мелких кусочков уменьшите возможность выполнения распределенных задач с гарантированным расположением данных. Это немного зависит от поставщика сетки, но для многих было бы ограничением.
Sub оптимальная производительность
В зависимости от того, сколько производительности вам нужно и какой тип приложения вы используете Hibernate кэш второго уровня может быть хорошим или плохим выбором. Хорошо с точки зрения того, что это plug and play...." вроде..."плохо, потому что вы никогда не будете сжимать представление ты бы выиграл. Кроме того, разработка богатых моделей означает больше предварительной работы и больше ООП.
ограниченные возможности запроса на самом кэше
Это зависит от поставщика кэша, но некоторые из поставщиков действительно не очень хорошо делают соединения с предложением Where, отличным от ID. Если вы пытаетесь построить и в индексе памяти для запроса на Hazelcast, например, вы увидите, что я имею в виду.
да, если вы используете Redis, Это улучшит вашу производительность.
нет, это не будет кардинальных изменений. :)
https://memorynotfound.com/spring-redis-application-configuration-example/
http://www.baeldung.com/spring-data-redis-tutorial
приведенные выше ссылки помогут вам узнать способ интеграции redis с вашим проектом.
Это зависит от движения.
Если у вас есть 1000 или более запросов в секунду, и у вас мало ОЗУ, то да, используйте узлы redis на другой машине, чтобы использовать их. Это значительно улучшит вашу оперативную память и скорость запроса.
но если это не так, то не используйте его.
помните, что вы можете использовать этот подход позже, когда вы увидите, что такое использование пула соединений RAM и базы данных.
Ваш вопрос уже обсуждался здесь. Проверьте эту ссылку: кэш приложений V. s. hibernate кэш второго уровня, который использовать?
Это был наиболее приемлемый ответ, с которым я согласен:
Это действительно зависит от вашей модели запросов приложений и трафика спросы.
- использование Redis/Hazelcast может дать лучшую производительность, так как не будет быть любой, туда-обратно больше дБ, но вы нормированный данные в БД и денормализованная копия в вашем кэше, которая будет оказывать давление в политиках обновления кэша. Так вы получаете самое лучшее представление на стоимость реализации обновления кэша при сохранении данных изменения.
- использование кэша 2-го уровня проще настроить, но он хранит только сущности по ID. Существует также кэш запросов, хранящий идентификаторы, возвращаемые a данный запрос. Таким образом, кэш 2-го уровня-это двухэтапный процесс, который вы нужно настроиться, чтобы получить лучшее спектакль. При выполнении проекционные запросы кэш объектов 2-го уровня не помогут вам, так как он работает только при загрузке объекта. Основным преимуществом кэша 2-го уровня является что легче синхронизировать его при изменении данных, особенно если все ваши данные сохраняются в Hibernate.
Итак, если вам нужен ultimate производительность и вы не возражаете против реализации логики обновления кэша это обеспечивает минимальное возможное окно согласованности, а затем внешний кэш.
Если вам нужно только кэшировать объекты (которые обычно не изменяют это часто), и вы в основном получаете доступ к ним через Hibernate entity загрузка, а затем кэш 2-го уровня может помочь вам.
надеюсь, что это помогает!