Springboot реализует функцию кэширования данных на уровне аннотации на основе технологии AOP Spring. Все конфигурации кэша настроены только на уровне аннотации, такие как декларативные транзакции.
Spring определяет интерфейсы Cachemanager и Cache для объединения различных технологий кэширования. Среди них Cachemanager - это абстрактный интерфейс для различных технологий кэширования, предоставляемых весной. Интерфейс кэша содержит различные операции кэша.
Кэхемер
Для различных технологий кэша необходимо реализовать различные кахманагеры. Spring определяет следующую реализацию Cachemanger.
| Кэхемер | описывать |
|---|---|
| SimpleCachEmanager | Используйте простую коллекцию для хранения кэшей, в основном для тестирования |
| CONCURRENTMAPCACHEMANAGER | Используйте CondurentMap в качестве технологии кеша (по умолчанию) |
| Noopcachemanager | Для тестирования |
| Ehcachecachemanager | Ehcache используется в качестве технологии кеша и часто используется, когда Hibernate |
| Guavacachemanager | Guavacache с использованием Google Guava в качестве технологии кэширования |
| Hazelcastcachemanager | Использование Hazelcast в качестве техники кэширования |
| Jcachecachemanager | Реализация с использованием стандарта JCache в качестве методов кэширования, таких как Apache Commons JCS |
| Rediscachemanager | Использование Redis в качестве технологии кэширования |
Обычный Springboot автоматически настроил Ehcache, Collection, Guava, CondurentMap и другие кэши для нас, а CondurentMapcachEmanager используется по умолчанию. Файл конфигурации Springboot.
Конфигурация приложения
spring.cache.type =#Cached Technical Type Spring.cache.cache-names = Имя приложения начинает создавать кэш, spring.cache.ehcache.config = ehcache Configuration File Местоположение. Класс реализации JCache, когда несколько классов реализации JCache
Конфигурация класса входа
Добавить аннотацию @enablecaching
Кэш аннотация
| аннотация | описывать |
|---|---|
| @Cachable | Перед вызовом метода вы должны сначала найти возвратное значение метода в кэше. Если это значение можно найти, кэшированное значение будет возвращено. В противном случае этот метод будет вызван, и возвратное значение будет помещено в кеш. |
| @Cacheput | Поместите возвратное значение метода в кеш. Кэш не проверяется до того, как метод будет вызван, и метод всегда будет вызван. |
| @Cacheevict | Очистите одну или несколько записей в кэше. |
| @Caching | Сгруппированные аннотации могут применяться одновременно с несколькими другими аннотациями кеша. |
Используйте Ehcache вручную
Во время реального процесса разработки существует ситуация, когда не используется аннотации, и вам нужно добавить кэш самостоятельно. Давайте возьмем Ehcache в качестве примера и кратко запишем процесс конфигурации.
1. Добавьте зависимости
Введите Springboot-Cache и Ehcache. Следует отметить, что ehcache не требует конфигурации версии, и корневой POM Springboot был интегрирован.
<!-- Cache--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <!-- ehcache --> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> </dependency>
2. Конфигурация класса входа
Добавить аннотацию @enablecaching
@SpringbootApplication@enableCachingPublic Class DemoApplication {} 3. Конфигурация Ehcache
В каталоге SRC/Main/Resources добавьте файл ehcache.xml, см. Контент в конце статьи.
4. Приложение. Конфигурация приложения
# Настройка ehcache cache spring.cache.type = ehcache# Укажите путь файла конфигурации ehcache Spring.cache.ehcache.config = classPath:/ehcache.xml
5. Используйте кеш
Inject Springboot автоматически настроен Bean, org.springframework.cache.cachemanager.
Простой тестовый класс:
пакет com.bbf.frame.test; import com.bbf.frame.application; import org.apache.commons.lang3.stringutils; import org.junit.test; import org.junit.runner.runwith; import.springframework.boot.test.springboottest; org.springframework.cache.cache; import org.springframework.cache.cachemanager; import org.springframework.test.context.junit4.springjunit4classrunner; import org.springframework.test.ceb.webapconfigur javax.annotation.resource; @runwith (springjunit4classrunner.class)@webappconfiguration@springboottest (classes = application.class, webenvironment = springboottest.webenvironment.mock) public class testacache {@resource private cachemanager cachemanager; @Test public void cachetest () {// Показать все кеш -пространства System.out.println (stringutils.join (cachemanager.getCachenames (), ",")); Cache cache = cachemanager.getcache ("usercache"); cache.put ("key", "123"); System.out.println ("успех кэша"); String res = cache.get ("key", string.class); System.out.println (res); }} Приложение ehcache.xml
<? xml version = "1.0" Encoding = "utf-8"?> <ehcache xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: nonamespaceSchemalocation = "http://ehcache.orgg/ehccecemalocation =" http://ehcache.orgg/ehccecemalocation = "http://ehcache.orge.orgace.xachcemalocation =" http://ehcache.orge.orgace.xachcemalocation = ". <!- Укажите файловый каталог. Когда EHCache записывает данные на жесткий диск, данные будут записаны в этот каталог файлов-> <diskstore path = "java.io.tmpdir"/> <!-Политика управления по умолчанию-> <defaultcache eternal = "false" maxelementsinmemory = "10000" overflowtodisk = "diskpersistent =" false "trine". Timetoliveseconds = "120" DiskexpiryThreadIntervalseconds = "120" MemoryStoreEvictionPolicy = "lru"/> <!- Этот кэш может выжить до секунд с временной секундой. Если период превышает временные секунды, а кэш инвалидируется-> <name = «usercache» eternal = "false" maxelementsinmemory = "100" overflowtodisk = "false" diskpersistent = "false" dimehotoidleseconds = "120" timeToliveSeconds = "180" MemoryStorySecondeconds = "120" TimeToliveSeconds = "180" MemoryStoryEvicy overyEvicySeconds = "120" timeToliveSeconds = "180". MaxElementsInMemory Максимальное количество кэшированных объектов в памяти, посмотрите на размер кучи, чтобы сделать это-> <!-Вечное: Истинное означает, что объект никогда не истекает. В настоящее время свойства временной и временной и временной собственности будут игнорироваться, а по умолчанию неверно-> <!-Maxelemsondisk: максимальное количество кэшированных объектов в жестком диске, если 0 означает бесконечность-> <! Кэш жесткого диска. Примечание. Если кэшированный объект должен быть записан на жесткий диск, объект должен реализовать сериализуемый интерфейс. -> <!-Diskspoolbuffersizemb: Размер диска, по умолчанию 30 МБ. Каждый кэш должен иметь свою собственную область кеша. -> <!-Diskpersistent: чтобы кэшировать данные о перезапуске виртуальной машины-> <!-DiskexpiryThreadIntervalseconds: интервал времени выполнения сбоя диска, по умолчанию-120 секунд-> <!-TimeToidLeseconds: устанавливает максимальное время, чтобы позволить объекту быть простоям, за секунды. Когда объект был доступен в последний раз, если значение свойства TimeDoidLeseconds превышает значение свойства TimeDoidLesseconds, объект истекает, а eHcache будет очищать его из кэша. Это свойство действительнее только в том случае, если вечное свойство является ложным. Если значение этого свойства равно 0, это означает, что объект может быть простоя на неопределенном времени-> <!-Timetoliveseconds: устанавливает максимальное время, которое объект позволяет существовать в кэше, за несколько секунд. Когда объект был сохранен в кэше, если время в кэше превышает значение свойства TimetoliveSeconds, объект истекает, а ehcache очистит его из кэша. Это свойство действительнее только в том случае, если вечное свойство является ложным. Если значение свойства равно 0, это означает, что объект может существовать в кэше на неопределенный срок. Временные секунды должны быть больше, чем свойство временных районов, чтобы иметь смысл-> <!-MemoryStoreevictionPolicy: когда будет достигнут предел максимальной синемории, Ehcache очистит память в соответствии с указанной политикой. Дополнительные политики: LRU (последняя недавно используемая, политика по умолчанию), FIFO (сначала, сначала) и LFU (минимальное количество посещений). -> </ehcache>
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.