Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Четверговая инвалидация кешей.  [new]
mayton
Member

Откуда: loopback
Сообщений: 42941
Привет друзья!

Все пользуются кешами. Сегодня топик не о том как прогреть кеш. А наоборот. Как удалить из него
устаревшие или изменённые записи.

Вопрос - сложный. И в общем случае еще нерешённый для 90% юзкейсов что я видел. Особенно
для реляционных БД.

Вобщем - отпишите ваш опыт (позитивный и негативный)

Спасибо.
10 окт 19, 14:56    [21991349]     Ответить | Цитировать Сообщить модератору
 Re: Четверговая инвалидация кешей.  [new]
mayton
Member

Откуда: loopback
Сообщений: 42941
Хеш-теги по теме (пишу навскидку по памяти могу что-то забыть поэтому прошу дополнять):

Java: EhCache, InfiniSpan, @EnableCaching (Spring)

General: Memcached, Redis

Servers: nginx

HTTP: Expires, Cache-Control, Age

Из Оракловых технологий: OCI Client Caching

Алгоритмы: LRU, 2Q, ARC

Теория: ? Х.З
10 окт 19, 16:23    [21991448]     Ответить | Цитировать Сообщить модератору
 Re: Четверговая инвалидация кешей.  [new]
Alexey Tomin
Member

Откуда: Самара
Сообщений: 1786
mayton
Привет друзья!

Все пользуются кешами. Сегодня топик не о том как прогреть кеш. А наоборот. Как удалить из него
устаревшие или изменённые записи.


У нас в итоге свой костылище написали :)
1. На метод с кэшированием можно поставить тэг. Потом сказать "почистить все кэши с таким тэгом". Есть и другие способы сбрасывать конкретный кэш.
2. Когда случился кэшмисс- в стеке ищутся другие методы, создающие сейчас кэш и выставляются зависимости. Поэтому когда чистятся кэши (строки кжшей) из пункта 1 - то чистятся и те строки кэши, заполнение которых было в стеке в момент создания кэша Картинка с другого сайта.

Можно пользоваться. Заодно проверьте на JDK11 - всё никак не доберусь...
11 окт 19, 11:22    [21991953]     Ответить | Цитировать Сообщить модератору
 Re: Четверговая инвалидация кешей.  [new]
mayton
Member

Откуда: loopback
Сообщений: 42941
Alexey Tomin
mayton
Привет друзья!

Все пользуются кешами. Сегодня топик не о том как прогреть кеш. А наоборот. Как удалить из него
устаревшие или изменённые записи.


У нас в итоге свой костылище написали :)
1. На метод с кэшированием можно поставить тэг. Потом сказать "почистить все кэши с таким тэгом". Есть и другие способы сбрасывать конкретный кэш.
2. Когда случился кэшмисс- в стеке ищутся другие методы, создающие сейчас кэш и выставляются зависимости. Поэтому когда чистятся кэши (строки кжшей) из пункта 1 - то чистятся и те строки кэши, заполнение которых было в стеке в момент создания кэша Картинка с другого сайта.

Можно пользоваться. Заодно проверьте на JDK11 - всё никак не доберусь...

Круто вам. А сколько времени (мс) прибл. занимала чистка кеша?
11 окт 19, 11:40    [21991975]     Ответить | Цитировать Сообщить модератору
 Re: Четверговая инвалидация кешей.  [new]
mayton
Member

Откуда: loopback
Сообщений: 42941
mayton
Хеш-теги по теме (пишу навскидку по памяти могу что-то забыть поэтому прошу дополнять):

Java: EhCache, InfiniSpan, @EnableCaching (Spring)

General: Memcached, Redis

Servers: nginx

HTTP: Expires, Cache-Control, Age

Из Оракловых технологий: OCI Client Caching

Алгоритмы: LRU, 2Q, ARC

Теория: ? Х.З

Еще сам себе добавлю.

HTTP: Expires, Cache-Control, Age, Etag
11 окт 19, 11:48    [21991986]     Ответить | Цитировать Сообщить модератору
 Re: Четверговая инвалидация кешей.  [new]
Alexey Tomin
Member

Откуда: Самара
Сообщений: 1786
mayton
Alexey Tomin
пропущено...


У нас в итоге свой костылище написали :)
1. На метод с кэшированием можно поставить тэг. Потом сказать "почистить все кэши с таким тэгом". Есть и другие способы сбрасывать конкретный кэш.
2. Когда случился кэшмисс- в стеке ищутся другие методы, создающие сейчас кэш и выставляются зависимости. Поэтому когда чистятся кэши (строки кжшей) из пункта 1 - то чистятся и те строки кэши, заполнение которых было в стеке в момент создания кэша Картинка с другого сайта.

Можно пользоваться. Заодно проверьте на JDK11 - всё никак не доберусь...

Круто вам. А сколько времени (мс) прибл. занимала чистка кеша?


Вот не считал никогда. Да и зачем? Если кэш почистился- то потом он будет заполнятся- и это важнее по времени. Да и чистка приводит к сборке мусора, а насколько она замедлится- никто не знает.

PS: сейчас я думаю, как бы обойтись без кодогенерации. А если на kotlin перейти? Но пока не придумал решение.
11 окт 19, 12:15    [21992024]     Ответить | Цитировать Сообщить модератору
 Re: Четверговая инвалидация кешей.  [new]
mayton
Member

Откуда: loopback
Сообщений: 42941
Пока вот такой статус.

mayton@ryzen-ssd:~/git/mxcache$ uname -a
Linux ryzen-ssd 5.0.0-31-generic #33~18.04.1-Ubuntu SMP Tue Oct 1 10:20:39 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
mayton@ryzen-ssd:~/git/mxcache$ 
mayton@ryzen-ssd:~/git/mxcache$ javac -version
javac 11.0.4
mayton@ryzen-ssd:~/git/mxcache$ mvn -version
Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-24T21:41:47+03:00)
Maven home: /maven/3.6.0
Java version: 11.0.4, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "5.0.0-31-generic", arch: "amd64", family: "unix"


mayton@ryzen-ssd:~/git/mxcache$ mvn clean package -DskipTests
............
[WARNING] The POM for com.maxifier.mxcache:mxcache-asm:jar:7.1 is missing, no dependency information available
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for MxCache 2.6.9-SNAPSHOT:
[INFO] 
[INFO] MxCache ............................................ SUCCESS [  0.849 s]
[INFO] MxCache runtime .................................... FAILURE [  0.062 s]
[INFO] MxCache instrumentator ............................. SKIPPED
[INFO] Generator of MxCache cache classes ................. SKIPPED
[INFO] MxCache IDEA API stubs ............................. SKIPPED
[INFO] MxCache Idea plugin ................................ SKIPPED
[INFO] MxCache maven plugin ............................... SKIPPED
[INFO] MxCache gradle plugin .............................. SKIPPED
[INFO] MxCache guice integration .......................... SKIPPED
[INFO] MxCache Guava integration .......................... SKIPPED
[INFO] MxCache tests ...................................... SKIPPED
[INFO] JConsole plugin stub ............................... SKIPPED
[INFO] MxCache JMX ........................................ SKIPPED
[INFO] MxCache EhCache strategies ......................... SKIPPED
[INFO] MxCache API stub generator ......................... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.125 s
[INFO] Finished at: 2019-10-12T15:09:53+03:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project mxcache-runtime: Could not resolve dependencies for project com.maxifier.mxcache:mxcache-runtime:jar:2.6.9-SNAPSHOT: Failure to find com.maxifier.mxcache:mxcache-asm:jar:7.1 in https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException
[ERROR] 
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <goals> -rf :mxcache-runtime
12 окт 19, 15:22    [21992760]     Ответить | Цитировать Сообщить модератору
 Re: Четверговая инвалидация кешей.  [new]
mayton
Member

Откуда: loopback
Сообщений: 42941
Менял профили. Пока не помогает.

mvn clean package -DskipTests -P jdk9
mvn clean package -DskipTests -P release
12 окт 19, 15:49    [21992764]     Ответить | Цитировать Сообщить модератору
 Re: Четверговая инвалидация кешей.  [new]
rabiter
Member

Откуда: SPb
Сообщений: 632
У меня та же ошибка при сборке. А интересно было бы посмотреть. У меня в мыслях уже давно (только что проверил, аж в 2016 году таску заводил) прикрутить какой-нибудь централизованный кеш на JCache API (JSR 107). С имплементаторами пока не определился, но вроде EHCache имплементируют JSR 107. Вообще не пролема и допилить под свои нужды. Тоже та же идея, вешать аннотацию на метод типа @CachedResults
Или по скоупам: @RequestScopedCachedResults
@SessionScopedCachedResults
и т.д.
т.е. инвалидация этих кешей будет происходить в момент дестроя скоупа.

Или @CachedResults(Type=Type.SYSTEM_CONFIGURATION)

Ну и если выясняется, что SYSTEM_CONFIGURATION меняется, бросаем событие, и все кеши типа SYSTEM_CONFIGURATION чистятся.

Но это просто задумки... Нет нет да вернусь к этому вопросу, когда-нибудь прикручу. Сейчас же в большей массе весь кеш это просто какие-то локальные решения, HashMaps, SessionScoped / ApplicationScoped бины и т.д.
12 окт 19, 18:28    [21992808]     Ответить | Цитировать Сообщить модератору
 Re: Четверговая инвалидация кешей.  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3355
rabiter
Но это просто задумки...
Я уж даже боюсь сказать сколько времени оно в спринге уже есть... в 3.1 точно все было
12 окт 19, 18:46    [21992816]     Ответить | Цитировать Сообщить модератору
 Re: Четверговая инвалидация кешей.  [new]
mayton
Member

Откуда: loopback
Сообщений: 42941
Если закомментарить плагины

maven-javadoc-plugin
maven-gpg-plugin

И инсталлировать по-модулям отдельно то компилляция проходит чуть дальше но всё равно есть
failed tests.
12 окт 19, 19:34    [21992838]     Ответить | Цитировать Сообщить модератору
 Re: Четверговая инвалидация кешей.  [new]
mayton
Member

Откуда: loopback
Сообщений: 42941
Меня в топике больше-бы интересовали более общие вопросы. А имено. Какие бывают кеши?

Вот статья на хабре https://habr.com/en/post/38771/ различает
- Независимый или статичный
- Явно-зависимый
- Неявно-зависимый
- Условно-зависимый

Связи между кешированием и шаблонами (CQRS например). Прочие свойства (идемпотентность данных). А также
теорема Брювера.
12 окт 19, 20:22    [21992854]     Ответить | Цитировать Сообщить модератору
 Re: Четверговая инвалидация кешей.  [new]
rabiter
Member

Откуда: SPb
Сообщений: 632
Андрей Панфилов
rabiter
Но это просто задумки...
Я уж даже боюсь сказать сколько времени оно в спринге уже есть... в 3.1 точно все было


к сожалению, у нас не спринг..
14 окт 19, 02:59    [21993344]     Ответить | Цитировать Сообщить модератору
 Re: Четверговая инвалидация кешей.  [new]
Alexey Tomin
Member

Откуда: Самара
Сообщений: 1786
И вправду- был сломан пуш в mvn-central (сделали не очень хорошими костылями). Пофикшу.
14 окт 19, 07:54    [21993365]     Ответить | Цитировать Сообщить модератору
 Re: Четверговая инвалидация кешей.  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3355
rabiter
к сожалению, у нас не спринг..
ну вот открыл другой проект ~2011 года, там тоже самое, только в профиль: на AspectJ чет написано.
14 окт 19, 12:14    [21993575]     Ответить | Цитировать Сообщить модератору
 Re: Четверговая инвалидация кешей.  [new]
Alexey Tomin
Member

Откуда: Самара
Сообщений: 1786
mayton
Пока вот такой статус.


Ага. mxcache-asm собирается и пушится отдельно. Он уже на oss.sonatype.com но ещё не доехал до мавен-централа.
Можно просто зайти туда и сделать mvn install (главное, чтобы был любой ключ gnupg локально- он сразу подписывает сборку).
Ну и тесты- пофиксил, там странная какая-то микробага с особенностями open jdk связанная.
14 окт 19, 14:05    [21993719]     Ответить | Цитировать Сообщить модератору
 Re: Четверговая инвалидация кешей.  [new]
Alexey Tomin
Member

Откуда: Самара
Сообщений: 1786
Alexey Tomin
Можно просто зайти туда и сделать mvn install


Т.е.
cd mxcache-asm
mvn install
14 окт 19, 14:06    [21993723]     Ответить | Цитировать Сообщить модератору
 Re: Четверговая инвалидация кешей.  [new]
rabiter
Member

Откуда: SPb
Сообщений: 632
Андрей Панфилов
rabiter
к сожалению, у нас не спринг..
ну вот открыл другой проект ~2011 года, там тоже самое, только в профиль: на AspectJ чет написано.


Да это все понятно
Надо только убедиться, что вызов аспектов в итоге не тратит больше времени чем польза от кеширования) Это я не про AspectJ, а про интерсепторы спринговые и CDI.
14 окт 19, 15:05    [21993800]     Ответить | Цитировать Сообщить модератору
 Re: Четверговая инвалидация кешей.  [new]
rabiter
Member

Откуда: SPb
Сообщений: 632
Alexey Tomin,

mxcache был изначально только частью вашего проекта, а потом вы вынесли его на гитхаб, правильно я понимаю? Я глянул, там довольно много всего)
14 окт 19, 15:07    [21993807]     Ответить | Цитировать Сообщить модератору
 Re: Четверговая инвалидация кешей.  [new]
Alexey Tomin
Member

Откуда: Самара
Сообщений: 1786
rabiter
Alexey Tomin,

mxcache был изначально только частью вашего проекта, а потом вы вынесли его на гитхаб, правильно я понимаю? Я глянул, там довольно много всего)


Там собственно кэш, плюс интеграции- с джусом, с мавен/грэдл/идеей.
Никаких "кишков" основных проектов не попало.
14 окт 19, 17:13    [21993954]     Ответить | Цитировать Сообщить модератору
 Re: Четверговая инвалидация кешей.  [new]
rabiter
Member

Откуда: SPb
Сообщений: 632
Alexey Tomin
rabiter
Alexey Tomin,

mxcache был изначально только частью вашего проекта, а потом вы вынесли его на гитхаб, правильно я понимаю? Я глянул, там довольно много всего)


Там собственно кэш, плюс интеграции- с джусом, с мавен/грэдл/идеей.
Никаких "кишков" основных проектов не попало.


Да это понятно, что от основных проектов там ничего нет. Просто интересно, что послужило толчком вынести кеш как отдельный проект в гитхаб?
14 окт 19, 17:18    [21993964]     Ответить | Цитировать Сообщить модератору
 Re: Четверговая инвалидация кешей.  [new]
Alexey Tomin
Member

Откуда: Самара
Сообщений: 1786
rabiter
Просто интересно, что послужило толчком вынести кеш как отдельный проект в гитхаб?


Изначально надо было выделить этот код в библиотеку, чтобы использовать в нескольких проектах.
А дальше, насколько я понимаю, результат показался достаточно хорошим, чтобы можно было показать всем.
Ну и прикольно же Картинка с другого сайта.
15 окт 19, 07:19    [21994245]     Ответить | Цитировать Сообщить модератору
 Re: Четверговая инвалидация кешей.  [new]
rabiter
Member

Откуда: SPb
Сообщений: 632
Alexey Tomin
rabiter
Просто интересно, что послужило толчком вынести кеш как отдельный проект в гитхаб?


Изначально надо было выделить этот код в библиотеку, чтобы использовать в нескольких проектах.
А дальше, насколько я понимаю, результат показался достаточно хорошим, чтобы можно было показать всем.
Ну и прикольно же Картинка с другого сайта.


Да, согласен, прикольно! Похожая ситуация, подумывал вынести кое-что в public, но потом как понял сколько там еще надо доделывать для паблика и плюнул)
Извиняюсь за флуд.
15 окт 19, 13:52    [21994631]     Ответить | Цитировать Сообщить модератору
 Re: Четверговая инвалидация кешей.  [new]
mayton
Member

Откуда: loopback
Сообщений: 42941
Alexey Tomin
Alexey Tomin
Можно просто зайти туда и сделать mvn install


Т.е.
cd mxcache-asm
mvn install


На другом окружении

ver
Microsoft Windows [Version 10.0.17763.678]
java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-gpg-plugin:1.5:sign (default) on project mxcache-asm: Exit code: 1 -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-gpg-plugin:1.5:sign (default) on project mxcache-asm: Exit code: 1
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:215)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
15 окт 19, 14:52    [21994684]     Ответить | Цитировать Сообщить модератору
 Re: Четверговая инвалидация кешей.  [new]
Alexey Tomin
Member

Откуда: Самара
Сообщений: 1786
mayton

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-gpg-plugin:1.5:sign (default) on project mxcache-asm: Exit code: 1 -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-gpg-plugin:1.5:sign (default) on project mxcache-asm: Exit code: 1
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:215)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)


Я ж говорю- GPG надо иметь с ключом.
Мавен централ пока не пропихнул либу :(

PS: но вот собирать на винде я даже никогда не пробовал. У нас винда только у PM'а, у которой и java-то не установлена Картинка с другого сайта.
15 окт 19, 16:10    [21994772]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Java Ответить