Основное исследование в этой статье - это контент, связанный с весенним кэшем, следующим образом.
Эта статья была примерно изменена на основе перевода Google. Поскольку я не знаю, что такое исходный текст, он может привести к ошибкам и неточностям в переводе, но общее направление кажется довольно хорошим, поэтому я разобрался здесь, надеясь, что это будет полезно.
Кэширование всегда было большой необходимостью как для повышения производительности приложений, так и для снижения ее рабочей нагрузки. Кроме того, его полезность сегодня особенно очевидна, которую можно использовать для обработки тысяч посетителей по сравнению. Архитектура веб -приложений. Начиная с версии 3.1, Spring предоставляет API управления кэшем, аналогичный декларативному управлению транзакциями. Абстрактный интерфейс кэша, использование различных решений кэша единым способом, оказывает наименьшее влияние на код.
Spring использует методы Java, чтобы впервые запросить метод для комбинации с параметрами, а Spring сохраняет возвратное значение в кэше. Следовательно, следующий запрос будет заключаться в том, чтобы использовать значение из кэша непосредственно без необходимости вызывать возможный дорогостоящий метод. Все применяется прозрачно, не влияя на называемый метод.
В этом посте мы увидим реализации двух разных каш -фантазий с весны.
Интеграция пружины и кеша проста и прозрачна. Метод, который нуждается в кеше, аннотируется @cachable Annotation
@Cachable (value = "datacache") public Reponse getDatas (long param1, string param2) {} Датакаш - это имя связанного кеша. Когда этот метод вызывается в первый раз, метод выполняет и сохраняет результат выполнения в наборе результатов с помощью секретного ключа, выведенного из <параметра 1 и параметра 2> в качестве результата. Когда один и тот же параметр снова вызывается, этот метод не должен быть выполнен снова.
Возможно, что с нашим методом связано более одного кеша
@Cachable ({"datacache", "default"}) public Reponse getDatas (long param1, string param2) {} В этом случае каждый кэш проверяется до выполнения метода, и если есть удар, соответствующее значение будет возвращено.
Доля основных алгоритмов менеджера кэша относительно мала. Кэш можно рассматривать как область памяти, в которой хранимые объекты отображаются уникальным ключом. Процесс поиска объектов выглядит следующим образом:
1. Рассчитайте ключ (используйте метод хэша для получения хэшкода)
2. Найти объекты на основе значения ключа
3. Если объект найден, верните результат
4. Если его нельзя найти, будет рассчитан ключ, который фактически связан с объектом, и объект будет храниться в соответствующем месте.
Spring использует простой хэш, который генерирует ключи на основе параметров пропускания метода.
Целевой метод не может просто генерировать ненужные ключи на основе параметров, но только некоторые простые случаи генерируются на основе параметров.
@Cachable (value = "datacache") public Reponse getDatas (Long Param1, String Param2, Boolean Param3) {}@Cachable позволяет разработчикам указать, как генерация ключей генерируется сами по себе. Вы можете использовать Spel Expressions для этого.
@Cachable (value = "datacache", key = "#param2") public Reponse getDatas (long param1, string param2, boolean param3) {} В этом случае выше, параметр кэшированного ключа является только Parma2
пружина также допускает вложенные свойства
@Cachable (value = "datacache", key =#param2.name ") public Reponse getDatas (long param1, data param2, boolean param3) {} Эта ситуация является ключом, рассчитанным на основе атрибута имени Parma2
Существует кэш, который может не подходить для кеша в использованном случае, но в некоторых случаях требуется кэш. Когда кэшируется, кэш обрабатывается на основе истинного или false, рассчитанного по выражению SPEL, и если условие является истинным, выполняется кэш.
@Cachable (value = "datacache", key = "#param2", sondy = "#param2.length <64") public Reponse getDatas (long param1, string param2, boolean param3) {} В этом случае кэш будет выполнен только в том случае, если длина второго параметра меньше 64
Кэш Spring может не только кэшировать данные, но и очистить хранилище кеша. Этот процесс используется для удаления устаревших данных или неиспользованных кэшированных данных. Аннотация @cacheevict определяет методы для выполнения кэша, это триггеры для удаления данных в кэше.
@Cacheevict (value = "datacache") public void reloadData () {}Этот вариант очень необходим, и этот метод будет использоваться, когда необходимо очистить кэшированные данные.
Чтобы включить поддержку кеша для Spring Project, нам нужно добавить кеш -комментарии в пространство имен.
<Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: cache = "http://www.springframework.org/schema/cache" xmlns: xsi = "http://www.w.w3.shema11111111.shememememans: xsi =" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd http://www.springframework.org/schema/context "> <cache: annotation-diven/>
Удалить аннотацию может отключить кэш или включить использование кэша в нашем классе конфигурации
@Configuration @enablecaching public class appconfig {} Технические ограничения
Параметры метода Object Pass должны иметь свой собственный метод хэшкода для расчета секретного ключа.
В качестве объекта, передаваемого и возвращенного как параметр, он должен быть сериализуем
Реализовать выбор
Весна предоставляет две основные реализации:
При их использовании вам нужно только объявить соответствующий Cachemanger и Manager Entity
Concurrenthashmap с использованием Java
<bean id="cacheManager"> <span style="white-space:pre"> </span><property name="caches"> <span style="white-space:pre"> </span><set> <span style="white-space:pre"> </span><bean name="default"/> <span style="white-space:pre"> </span></property> </bean>
Каждому управлению нужно имя, которое распознается комментариями. Можно управлять несколькими простыми экологически чистыми, и эта реализация в основном ненужна.
Реализовать ehcache
Заявление о кахмангере
Bean id = "cachemanager"> <name = "cachemanager" ref = "ehcache"/> </bean> <bean id = "ehcache"> <name = "configlocation" value = "classpath: ehcache.xml"/> <name = "areed" value = "/> </bean>
В файле ehcache.xml есть файл параметров кэша приложений:
<ehcache xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true" monitoring="autodetect" dynamicConfig="true" maxBytesLocalHeap="150M"> <diskStore path="java.io.tmpdir"/> <defaultCache eternal="false" maxElementsInMemory="100" OverflowToDisk = "false"/> <name = "datacache" eternal = "false" dimeToidLeseconds = "300" maxbyteslocalHeap = "30m" timetoliveseconds = "300" OupflowTodisk = "true" diskperSistent = "false" diskexpiryNiterValerVallAlseconds = "120" MemoryStoreEvictionPolicy = "lru"/> </ehcache>
Используя EHCache, мы можем определить несколько параметров кэша очень простым способом
Имя: кэшированный идентификатор
MaxbyteslocalHeap: определяет количество байтов, которые кэш может использовать для виртуальной машины. Если был установлен Cachemanager MaxbyteslocalHeap, определенный размер кэша будет вычтенен Cachemanager. Другой кэш обменивался перерывами. Значением этого свойства являются данные <число> k | K | M | M | G | G обозначает килобиты (K | K), мегабайты (M | M) или гигабайты (G | G).
Вечность: определяет, является ли элемент вечным. Если это так, тайм -аут будет игнорироваться, а проект никогда не истекло.
TimeToidLeseconds: это количество секунд, элемент был оставлен в последнем использовании.
Временные секунды: это количество секунд, которые проект прожил в cache.la Создание значений по умолчанию составляет 0, а проект будет жив навсегда.
MemoryStoreEvictionPolicy Политика грабежа: LRU - наименьшее недавно используемое, редко используется FIFO - первый, самый старый элемент по дате создания.
DiskexpiryThreadIntervalseconds: Процесс взыскания контролирует количество секунд между двумя прогонами.
Diskpersistent: позволяет восстановить объекты между двумя совпадами виртуальных машин, хранящихся на диске.
Overflowtodisk: определяет, может ли объект храниться на диске для достижения максимального элемента хранения.
Подводя итог, используйте простую математическую формулу: expirationTime = Math.min((creationTime + timeToLive),(mostRecentTime + timeToIdle))
Выше приведено подробное объяснение кода весеннего кэша в этой статье, я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!