|
|
|
Spring и EhCache
|
|||
|---|---|---|---|
|
#18+
Добрый вечер. Только начал изучать кеширование на спринге, так что вопрос, возможно, довольно банальный. Есть два селекта в базу, которые выполняются довольно часто. Хотелось бы их закешировать. Просмотрев уроки, создал бины Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Файл ehcache.xml Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. И аннотировал нужные методы: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Вопрос первый - не надо ли как-то разруливать кэши? Достаточно ли просто указать разные имена и они будут спокойно применяться на разных методах? Вопрос второй - если кэш не имеет значения и два потока одновременно обратятся к методу, оба пойдут искать значение в базу. Мне казалось, что можно как-то, подобно синхронизации на java, залочить кэш. Но найти эту настройку не удалось. Или же ее нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 00:14 |
|
||
|
Spring и EhCache
|
|||
|---|---|---|---|
|
#18+
BoomLixВопрос второй - если кэш не имеет значения и два потока одновременно обратятся к методу, оба пойдут искать значение в базу. Мне казалось, что можно как-то, подобно синхронизации на java, залочить кэш. Но найти эту настройку не удалось. Или же ее нет? Вам возможно надо посмотреть сценарий для @CachePut На самом деле, то что Вы спрашиваете не имеет смысла если следовать грамматике русского языка и логики транзакций для кеша и базы данных. К слову сказать все давно уже пишут кеш на Редисе. Вот мой популярный пример для редиса написанный три года назад. https://github.com/SVyatkin/predix-jpa-cf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 07:31 |
|
||
|
Spring и EhCache
|
|||
|---|---|---|---|
|
#18+
Sergunka, @CachePut мне вряд ли поможет. Насколько я понимаю, метод, аннотированный @CachePut все равно вызывается. То есть если в методе есть запрос в базу, он будет производиться всегда, а результат его будет кэшироваться. Проблема в том, что именно частых запросов я и хочу избежать. Да и кроме этого метода у меня этот кэш больше нигде не используется, так что пользоваться результатом @CachePut будет некому. SergunkaНа самом деле, то что Вы спрашиваете не имеет смысла если следовать грамматике русского языка и логики транзакций для кеша и базы данных. Я еще только разбираюсь с кэшем, так что могу (и, скорее всего) что-то не так понимать. Поясните пожалуйста, что именно не так? Мне казалось, что кеш будет работать так: Первый поток заходит в метод, идет в базу, получает данные и кэширует их. Второй поток с таким же значением приходит к методу, смотрит кэш, видит, что там уже есть значение и возвращает его. Обращение к базе не происходит. У меня же получается, что и первый, и второй потоки вызывают метод и обращаются в базу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 10:18 |
|
||
|
Spring и EhCache
|
|||
|---|---|---|---|
|
#18+
Не надо втаскивать в топик Redis. Это не поможет автору в решении его вопроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 11:08 |
|
||
|
Spring и EhCache
|
|||
|---|---|---|---|
|
#18+
Насколько я понимаю, в кешменегере каждый кеш надо сконфигурировать либо через код, либо xml. Через код удобнее, можно сделать одну функцию на все кеши. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 16:28 |
|
||
|
Spring и EhCache
|
|||
|---|---|---|---|
|
#18+
Что касается сихнронизации, в доке спринга сказано : Код: java 1. 2. Synchronized caching In a multi-threaded environment, certain operations might be concurrently invoked for the same argument (typically on startup). By default, the cache abstraction does not lock anything and the same value may be computed several times, defeating the purpose of caching. For those particular cases, the sync attribute can be used to instruct the underlying cache provider to lock the cache entry while the value is being computed. As a result, only one thread will be busy computing the value while the others are blocked until the entry is updated in the cache. This is an optional feature and your favorite cache library may not support it . All CacheManager implementations provided by the core framework support it. Check the documentation of your cache provider for more details. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 16:32 |
|
||
|
Spring и EhCache
|
|||
|---|---|---|---|
|
#18+
Герой дняЧто касается сихнронизации, в доке спринга сказано : Код: java 1. 2. Synchronized caching In a multi-threaded environment, certain operations might be concurrently invoked for the same argument (typically on startup). By default, the cache abstraction does not lock anything and the same value may be computed several times, defeating the purpose of caching. For those particular cases, the sync attribute can be used to instruct the underlying cache provider to lock the cache entry while the value is being computed. As a result, only one thread will be busy computing the value while the others are blocked until the entry is updated in the cache. This is an optional feature and your favorite cache library may not support it . All CacheManager implementations provided by the core framework support it. Check the documentation of your cache provider for more details. Отличный комент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 18:47 |
|
||
|
Spring и EhCache
|
|||
|---|---|---|---|
|
#18+
BoomLixУ меня же получается, что и первый, и второй потоки вызывают метод и обращаются в базу У Вас возникает race condition устоявшийся термин в индустрии. Если Ваш кеш поддерживает параметр sync - то повезло. https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/cache/annotation/Cacheable.html Вообще достичь рейс кондишинс в тестировании довольно нетривиально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 19:06 |
|
||
|
Spring и EhCache
|
|||
|---|---|---|---|
|
#18+
Рано говорить о race condition. Автор пишет что только изучает spring+ehcache. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 19:57 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=46&tid=2122034]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
| others: | 11ms |
| total: | 152ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...