Локальный ehcache Grails настроен в сочетании с удаленной терракотой
В нашей среде Grails настроен ehcache, и я пытаюсь выяснить, как можно настроить локальный кеш с помощью удаленного терракотового кеша.
Сценарий состоит в том, что у нас есть некоторые данные, которые являются минимально дорогими для вычисления и извлекают выгоду из локального кэша в памяти, но преимущество сводится к минимуму при использовании удаленного терракотового кэша.
Конфиг в настоящее время довольно прост:
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd" >
<diskStore path="java.io.tmpdir"/>
<cacheManagerEventListenerFactory class="" properties=""/>
<defaultCache
maxElementsInMemory="20000"
eternal="false"
timeToLiveSeconds="12000"
overflowToDisk="false"
diskPersistent="false">
<terracotta />
</defaultCache>
<terracottaConfig url="${com.ngs.app.tc.host}:${com.ngs.app.tc.port}" />
<cache name="org.hibernate.cache.UpdateTimestampsCache"
maxElementsInMemory="10000"
timeToIdleSeconds="300"/>
<cache name="org.hibernate.cache.StandardQueryCache"
maxElementsInMemory="10000"
timeToIdleSeconds="300"/>
</ehcache>
Вопросы:
Учитывая приведенный выше конфиг, означает ли это, что при установке / переносе кэша всегда выполняется обратный путь к серверу терракоты?
Есть ли возможная конфигурация, в которой он будет использовать локальный "горячий" кеш, прежде чем отправиться туда и обратно на сервер?
Если будет использоваться локальный "горячий" кэш, это необходимо будет реализовать программно, используя другую конфигурацию кеша, а не терракотовую?
Спасибо за любой совет...
1 ответ
Несколько моментов:
- Приведенная выше конфигурация только объявляет кластеризацию кэша по умолчанию, а именованные кэши не кластеризуются.
- Ehcache работает с многоуровневой системой, что означает, что даже для кластерного кэша настройка
maxElementsInMemory
будет применяться к уровню кеша в кэше, локальному для каждой части JVM кластера Terracotta. Замечания:maxElementsInMemory
устарела и должна быть замененаmaxEntriesLocalHeap
в последних версиях Ehcache.
Учитывая это, вот основные операции и их связь с кластеризованным битом кэша:
- Получить с местным хитом: только касается уровня на куче, нет терракотового туда и обратно
- Получить с местной мисс: пойду попробую найти значение в кластере - Терракота туда и обратно
- Поставить: нужно будет обновить кластер - терракота туда и обратно
- Удалить: нужно будет обновить кластер - терракота туда и обратно
Для этих двух последних операций конфигурация по умолчанию отделяет локальную операцию от кластерной. Если вы не можете обработать устаревшее значение для чтения, вы можете поиграть с настройкой согласованности.
Это означает, что ответы на ваши вопросы:
- См выше
- да
- Да и нет: если вам нужна только локальная часть, вы можете иметь только локальный кеш, просто опустите
terracotta
элемент в конфигурации кеша. Если вам нужен кластеризованный бит, но вы хотите, чтобы большинство попаданий в кэш были локальными, вам нужно настроить конфигурацию кластерного кэша.