Всем привет, по поводу первого уровня, на сколько я понял транзакции созданы только для изменения данных, а не для чтения, поэтому не совсем правильно читать в транзакции данные и потом ничего с ними не делать, но может я ошибаюсь? Получается что кеш первого уровня работает только с транзакциями? Но нет, я докапался до сути, необходимо над сущностями ставить аннотацию @Cacheable тогда для сущности будет работать кеш первого уровня, и при этом если я в application.yaml отключу кеш 2го уровня, все равно кеш 1го уровня будет работать и без транзакции spring.jpa.properties.hibernate.cache.use_query_cache=true spring.jpa.properties.hibernate.cache.use_second_level_cache=false Кстати, так тоже работает, но тут возможно как раз работает только 2ой уровень: spring.jpa.properties.hibernate.cache.use_query_cache=false spring.jpa.properties.hibernate.cache.use_second_level_cache=true Так не работает: spring.jpa.properties.hibernate.cache.use_query_cache=false spring.jpa.properties.hibernate.cache.use_second_level_cache=false Вот весь код: @Entity @Table @Cacheable @Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region="account") public class Account { .... } @Test void testCache(){ Account account = entityManager.find(Account.class, 571); Account account1 = entityManager.find(Account.class, 571); Account account2 = entityManager.find(Account.class, 571); }
1. Господи, благослови ютьюб с его длинными комментами. А то в кое какой соц сети приходится оставлять по 20 комментов в ряд, а они еще потом между собой шафляться. 2. Вроде транзакции не только для изменения данных используются. Если нужно чтобы 2 select запроса выполнились в 1 момент (и работали с одинаковыми данными), то транзакция вроде тоже нужна. Могу ошибаться. Но перед этим видео я смотрел hibernate от Joker. Там он как раз рассказывал о проблеме, что было 2 select. Причем второй был select for update. И там у них была проблема, что между первым и вторым select происходили изменения данных в какой-то из транзакций
@@ziral0 Да, действительно, сейчас перепроверил в ChatGPT написали что требуется для согласованного чтения данных, но думаю что далеко не все случаи с этим связанны и должна быть алтернатива кешировать данные без транзакций) В любом случае спасибо, буду знать этот ньюанс
5:50 начало про кэш
отличный, подробный доклад
Всем привет, по поводу первого уровня, на сколько я понял транзакции созданы только для изменения данных, а не для чтения, поэтому не совсем правильно читать в транзакции данные и потом ничего с ними не делать, но может я ошибаюсь?
Получается что кеш первого уровня работает только с транзакциями?
Но нет, я докапался до сути, необходимо над сущностями ставить аннотацию @Cacheable тогда для сущности будет работать кеш первого уровня, и при этом если я в application.yaml отключу кеш 2го уровня, все равно кеш 1го уровня будет работать и без транзакции
spring.jpa.properties.hibernate.cache.use_query_cache=true
spring.jpa.properties.hibernate.cache.use_second_level_cache=false
Кстати, так тоже работает, но тут возможно как раз работает только 2ой уровень:
spring.jpa.properties.hibernate.cache.use_query_cache=false
spring.jpa.properties.hibernate.cache.use_second_level_cache=true
Так не работает:
spring.jpa.properties.hibernate.cache.use_query_cache=false
spring.jpa.properties.hibernate.cache.use_second_level_cache=false
Вот весь код:
@Entity
@Table
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region="account")
public class Account {
....
}
@Test
void testCache(){
Account account = entityManager.find(Account.class, 571);
Account account1 = entityManager.find(Account.class, 571);
Account account2 = entityManager.find(Account.class, 571);
}
1. Господи, благослови ютьюб с его длинными комментами. А то в кое какой соц сети приходится оставлять по 20 комментов в ряд, а они еще потом между собой шафляться.
2. Вроде транзакции не только для изменения данных используются. Если нужно чтобы 2 select запроса выполнились в 1 момент (и работали с одинаковыми данными), то транзакция вроде тоже нужна. Могу ошибаться.
Но перед этим видео я смотрел hibernate от Joker. Там он как раз рассказывал о проблеме, что было 2 select. Причем второй был select for update. И там у них была проблема, что между первым и вторым select происходили изменения данных в какой-то из транзакций
@@ziral0 Да, действительно, сейчас перепроверил в ChatGPT написали что требуется для согласованного чтения данных, но думаю что далеко не все случаи с этим связанны и должна быть алтернатива кешировать данные без транзакций)
В любом случае спасибо, буду знать этот ньюанс
Всего 1 доклад? Делай ещё, всё ок 😀