|
|
|
Spring @Cacheable ключ
|
|||
|---|---|---|---|
|
#18+
Есть такой вот примерчик: http://nikcode.blogspot.ru/2012/12/spring-cache.html Допустим, у нас есть такая сущность: Код: java 1. 2. 3. 4. 5. 6. 7. И следующий интерфейс для DAO: Код: java 1. 2. 3. 4. 5. имплементация: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. тут пока что всё ясно. На каждый вызов метода getById происходит сначала обращение к кешу. Кеш это мапа, которая в качестве ключа использует аргумент метода. Если есть метод, который модифицирует наши объекты, то мы должны навесить на него аннотацию @CashEvict: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Я так понимаю, что ключ кеша должен выбираться так, чтобы уникально определять сущность. А что делать если ключ составной? Что делать если ключ это сложный объект?( equals / hashcode ?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2016, 13:03 |
|
||
|
Spring @Cacheable ключ
|
|||
|---|---|---|---|
|
#18+
Что делать если мне скажем надо обновить у всех энтитей одно поле только Какую аннотацию мне надо навесить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2016, 14:30 |
|
||
|
Spring @Cacheable ключ
|
|||
|---|---|---|---|
|
#18+
questioner, эта транзакция лучше выполняется на стороне БД. Тоесть Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2016, 15:00 |
|
||
|
Spring @Cacheable ключ
|
|||
|---|---|---|---|
|
#18+
ещё из доки не понял: http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#cache-annotations-cacheable 35.3.4 @Caching annotation There are cases when multiple annotations of the same type, such as @CacheEvict or @CachePut need to be specified, for example because the condition or the key expression is different between different caches. Unfortunately Java does not support such declarations however there is a workaround - using an enclosing annotation, in this case, @Caching. @Caching allows multiple nested @Cacheable, @CachePut and @CacheEvict to be used on the same method: @Caching(evict = { @CacheEvict("primary"), @CacheEvict(cacheNames="secondary", key="#p0") }) public Book importBooks(String deposit, Date date) Ну понятно, что на момент написания доки не было repeatable annotations Но что конкретно значит такая декларация? автор@CacheEvict("primary") это типа почисти "primary" кеш. По какому условию? весь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2016, 15:00 |
|
||
|
Spring @Cacheable ключ
|
|||
|---|---|---|---|
|
#18+
Repeatable появились начиная с Java 8 https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Repeatable.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2016, 15:06 |
|
||
|
Spring @Cacheable ключ
|
|||
|---|---|---|---|
|
#18+
maytonquestioner, эта транзакция лучше выполняется на стороне БД. Тоесть Код: java 1. Как это связано с вопросом? maytonRepeatable появились начиная с Java 8 именно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2016, 14:53 |
|
||
|
Spring @Cacheable ключ
|
|||
|---|---|---|---|
|
#18+
questionerКак это связано с вопросом? А ладно забей. Если эта магия связанная с миграцией БД или апгрейдом версии - то сделал-бы через механизмы SQL. Но на bulk-операциях ORM-ы всегда работали плохо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2016, 16:22 |
|
||
|
Spring @Cacheable ключ
|
|||
|---|---|---|---|
|
#18+
mayton, вопрос с базой вообще не связан) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2016, 15:32 |
|
||
|
Spring @Cacheable ключ
|
|||
|---|---|---|---|
|
#18+
questioner, Как в итоге решил? у меня другая проблема. Я поставил над методом findAll кешировать рузультат И через какое то время честь обектов перестает возвращаться ... Т.е возвращалось 15 а через несколько итераций стало возвращаться 1 Кеш стандартный аннотации спринг https://spring.io/blog/2014/04/14/cache-abstraction-jcache-jsr-107-annotations-support ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2016, 22:22 |
|
||
|
Spring @Cacheable ключ
|
|||
|---|---|---|---|
|
#18+
Atum1questioner, Как в итоге решил? у меня другая проблема. Я поставил над методом findAll кешировать рузультат И через какое то время честь обектов перестает возвращаться ... Т.е возвращалось 15 а через несколько итераций стало возвращаться 1 Кеш стандартный аннотации спринг https://spring.io/blog/2014/04/14/cache-abstraction-jcache-jsr-107-annotations-support Изначальный вопрос нерешаем честно судя по всему. частично обновить поле нельзя. Только целиком ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2016, 15:18 |
|
||
|
Spring @Cacheable ключ
|
|||
|---|---|---|---|
|
#18+
questioner, Нужно внимательнее читать доки по спрингу Так же писать тесты Так же задуматься о переходе на стандартные аннотации кеширования jsr 107 https://spring.io/blog/2014/04/14/cache-abstraction-jcache-jsr-107-annotations-support https://habrahabr.ru/post/113945/ Чтобы что то обвить нужно узать @CachePut который прозрачно оьновляет значение в бд и в кеше @CacheEvict @CacheRemove удаляет из кеша по параметрам обновляя кеш Составной ключ работает отлично через spel язык чисто у спринговых аннотаций куча параметров для настройки ключей итд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2016, 23:37 |
|
||
|
Spring @Cacheable ключ
|
|||
|---|---|---|---|
|
#18+
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. http://stackoverflow.com/questions/14072380/cacheable-key-on-multiple-method-arguments + свой CacheKeyGenerator Код: java 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 08:15 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39187225&tid=2123986]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
44ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 333ms |

| 0 / 0 |
