{"id":33722,"date":"2025-11-06T08:41:38","date_gmt":"2025-11-06T05:41:38","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=33722"},"modified":"2025-11-06T08:41:38","modified_gmt":"2025-11-06T05:41:38","slug":"hibernate-ehcache-hibernate-second-level-cache","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/hibernate-ehcache-hibernate-second-level-cache\/","title":{"rendered":"Hibernate EHCache &#8211; Hibernate Second Level Cache"},"content":{"rendered":"<p><body><\/p>\n<h2>Giri\u015f<\/h2>\n<p>Modern web uygulamalar\u0131nda performans, kullan\u0131c\u0131 deneyimi ve sistem kaynaklar\u0131n\u0131n verimli kullan\u0131m\u0131 a\u00e7\u0131s\u0131ndan kritik bir \u00f6neme sahiptir. Veritaban\u0131 i\u015flemleri genellikle bir uygulaman\u0131n en yava\u015f bile\u015fenlerinden biridir ve bu i\u015flemlerin s\u0131k\u00e7a tekrarlanmas\u0131 performans\u0131 ciddi \u015fekilde olumsuz etkileyebilir. Bu noktada \u00f6nbellekleme (caching) devreye girer. \u00d6nbellekleme, s\u0131k\u00e7a eri\u015filen verileri daha h\u0131zl\u0131 bir depolama alan\u0131nda (bellekte) tutarak, her seferinde veritaban\u0131na gitme ihtiyac\u0131n\u0131 ortadan kald\u0131ran veya azaltan bir tekniktir.<\/p>\n<p>Hibernate, Java d\u00fcnyas\u0131n\u0131n en pop\u00fcler ORM (Object-Relational Mapping) ara\u00e7lar\u0131ndan biridir ve veritaban\u0131 i\u015flemlerini soyutlayarak geli\u015ftiricilere b\u00fcy\u00fck kolayl\u0131k sa\u011flar. Hibernate, performans\u0131 art\u0131rmak i\u00e7in g\u00fc\u00e7l\u00fc bir \u00f6nbellekleme mekanizmas\u0131 sunar. Bu mekanizma iki ana seviyeden olu\u015fur: Birinci Seviye \u00d6nbellek (First-Level Cache) ve \u0130kinci Seviye \u00d6nbellek (Second-Level Cache). Bu rehberde, \u00f6zellikle Hibernate&#8217;in \u0130kinci Seviye \u00d6nbelle\u011fi&#8217;ni ve bu \u00f6nbelle\u011fi y\u00f6netmek i\u00e7in s\u0131kl\u0131kla tercih edilen EHCache k\u00fct\u00fcphanesini detayl\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p>\n<h2>Hibernate \u0130kinci Seviye \u00d6nbellek: Temeller ve Faydalar\u0131<\/h2>\n<p>Hibernate, veritaban\u0131 etkile\u015fimlerini optimize etmek i\u00e7in iki seviyeli bir \u00f6nbellek yap\u0131s\u0131 kullan\u0131r:<\/p>\n<p><H3>Birinci Seviye \u00d6nbellek (First-Level Cache)<\/H3><br \/>\nHer <code>Session<\/code> nesnesine \u00f6zeldir ve varsay\u0131lan olarak etkindir. Bir oturum boyunca y\u00fcklenen veya kaydedilen t\u00fcm nesneler bu \u00f6nbellekte tutulur. Ayn\u0131 oturum i\u00e7inde ayn\u0131 nesneye tekrar eri\u015fildi\u011finde, veritaban\u0131na gitmek yerine do\u011frudan bu \u00f6nbellekten al\u0131n\u0131r. Bu \u00f6nbellek, oturum kapand\u0131\u011f\u0131nda temizlenir ve oturumlar aras\u0131nda payla\u015f\u0131lmaz.<\/p>\n<p><H3>\u0130kinci Seviye \u00d6nbellek (Second-Level Cache)<\/H3><br \/>\n<code>SessionFactory<\/code> seviyesinde \u00e7al\u0131\u015f\u0131r ve t\u00fcm oturumlar (Session&#8217;lar) aras\u0131nda payla\u015f\u0131l\u0131r. Birinci seviye \u00f6nbelle\u011fin aksine, \u0130kinci Seviye \u00d6nbellek kal\u0131c\u0131d\u0131r ve birden fazla oturum taraf\u0131ndan kullan\u0131labilir. Bir nesne bir oturum taraf\u0131ndan y\u00fcklendi\u011finde, \u00f6nce Birinci Seviye \u00d6nbelle\u011fe, ard\u0131ndan \u0130kinci Seviye \u00d6nbelle\u011fe eklenir. Ba\u015fka bir oturum ayn\u0131 nesneyi istedi\u011finde, \u00f6nce kendi Birinci Seviye \u00d6nbelle\u011fine bakar, yoksa \u0130kinci Seviye \u00d6nbelle\u011fe bakar. E\u011fer orada bulursa, veritaban\u0131na gitmeden nesneyi d\u00f6nd\u00fcr\u00fcr.<\/p>\n<p><H3>\u0130kinci Seviye \u00d6nbelle\u011fin Faydalar\u0131:<\/H3><br \/>\n*   <strong>Veritaban\u0131 Y\u00fck\u00fcn\u00fc Azaltma:<\/strong> S\u0131k\u00e7a eri\u015filen veriler i\u00e7in veritaban\u0131na yap\u0131lan sorgu say\u0131s\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r.<br \/>\n*   <strong>Performans Art\u0131\u015f\u0131:<\/strong> Verilerin bellekten okunmas\u0131, veritaban\u0131ndan okunmas\u0131ndan \u00e7ok daha h\u0131zl\u0131d\u0131r. Bu da uygulama yan\u0131t s\u00fcrelerini iyile\u015ftirir.<br \/>\n*   <strong>\u00d6l\u00e7eklenebilirlik:<\/strong> Veritaban\u0131 \u00fczerindeki bask\u0131y\u0131 azaltarak uygulaman\u0131n daha fazla kullan\u0131c\u0131y\u0131 veya i\u015flemi desteklemesine olanak tan\u0131r.<\/p>\n<p><H3>\u0130kinci Seviye \u00d6nbelle\u011fin Sak\u0131ncalar\u0131\/Dikkat Edilmesi Gerekenler:<\/H3><br \/>\n*   <strong>Veri Tutarl\u0131l\u0131\u011f\u0131:<\/strong> \u00d6nbellekteki verilerle veritaban\u0131ndaki verilerin senkronizasyonu \u00f6nemlidir. Veritaban\u0131ndaki bir de\u011fi\u015fiklik \u00f6nbelle\u011fe yans\u0131t\u0131lmazsa, &#8220;stale data&#8221; (eskimi\u015f veri) sorunlar\u0131 ortaya \u00e7\u0131kabilir. Hibernate&#8217;in \u00f6nbellek stratejileri bu sorunu y\u00f6netmeye yard\u0131mc\u0131 olur.<br \/>\n*   <strong>Bellek T\u00fcketimi:<\/strong> \u00c7ok fazla veri \u00f6nbelle\u011fe al\u0131n\u0131rsa, bellek t\u00fcketimi artabilir ve bu da uygulaman\u0131n performans\u0131n\u0131 olumsuz etkileyebilir. Do\u011fru boyutland\u0131rma ve ya\u015fland\u0131rma stratejileri kritik \u00f6neme sahiptir.<br \/>\n*   <strong>Da\u011f\u0131t\u0131k Ortamlar:<\/strong> Birden fazla uygulama sunucusunun oldu\u011fu da\u011f\u0131t\u0131k sistemlerde, her sunucunun kendi \u00f6nbelle\u011fi ba\u011f\u0131ms\u0131z \u00e7al\u0131\u015f\u0131rsa tutars\u0131zl\u0131klar ya\u015fanabilir. Bu t\u00fcr senaryolarda da\u011f\u0131t\u0131k \u00f6nbellek \u00e7\u00f6z\u00fcmleri (\u00f6rne\u011fin Terracotta ile EHCache) veya di\u011fer da\u011f\u0131t\u0131k \u00f6nbellek sa\u011flay\u0131c\u0131lar\u0131 (Redis, Infinispan) gereklidir.<\/p>\n<h2>EHCache: Hibernate ile Neden ve Nas\u0131l Kullan\u0131l\u0131r?<\/h2>\n<p>EHCache, Java tabanl\u0131 uygulamalar i\u00e7in pop\u00fcler, a\u00e7\u0131k kaynakl\u0131, y\u00fcksek performansl\u0131 ve sa\u011flam bir \u00f6nbellekleme k\u00fct\u00fcphanesidir. Hibernate&#8217;in \u0130kinci Seviye \u00d6nbelle\u011fi i\u00e7in en s\u0131k tercih edilen sa\u011flay\u0131c\u0131lardan biridir.<\/p>\n<p><H3>EHCache&#8217;in Tercih Edilme Nedenleri:<\/H3><br \/>\n*   <strong>Kolay Entegrasyon:<\/strong> Hibernate ile sorunsuz bir \u015fekilde entegre olur.<br \/>\n*   <strong>Zengin \u00d6zellik Seti:<\/strong> Bellek i\u00e7i (in-memory), disk tabanl\u0131 (disk-based) \u00f6nbellekleme, \u00f6nbellek ya\u015fland\u0131rma (eviction) algoritmalar\u0131 (LRU, LFU, FIFO), \u00f6nbellek istatistikleri ve da\u011f\u0131t\u0131k \u00f6nbellekleme yetenekleri sunar.<br \/>\n*   <strong>Performans:<\/strong> Y\u00fcksek performansl\u0131 ve d\u00fc\u015f\u00fck gecikmeli \u00f6nbellek i\u015flemleri sa\u011flar.<br \/>\n*   <strong>Geni\u015f Kullan\u0131m Alan\u0131:<\/strong> Sadece Hibernate ile de\u011fil, genel ama\u00e7l\u0131 bir \u00f6nbellek \u00e7\u00f6z\u00fcm\u00fc olarak da yayg\u0131n \u015fekilde kullan\u0131l\u0131r.<br \/>\n*   <strong>Olgunluk ve Topluluk Deste\u011fi:<\/strong> Uzun y\u0131llard\u0131r geli\u015ftirilmekte olan olgun bir projedir ve geni\u015f bir geli\u015ftirici toplulu\u011funa sahiptir.<\/p>\n<h2>Hibernate ve EHCache Entegrasyonu: Ad\u0131m Ad\u0131m Yap\u0131land\u0131rma<\/h2>\n<p>Hibernate&#8217;\u0131n \u0130kinci Seviye \u00d6nbelle\u011fini EHCache ile kullanmak i\u00e7in a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 izlememiz gerekir:<\/p>\n<p><H3>Ad\u0131m 1: Ba\u011f\u0131ml\u0131l\u0131klar\u0131 Ekleme<\/H3><br \/>\nProjenizin <code>pom.xml<\/code> (Maven) veya <code>build.gradle<\/code> (Gradle) dosyas\u0131na gerekli ba\u011f\u0131ml\u0131l\u0131klar\u0131 ekleyin. Hibernate 5 ve sonras\u0131 i\u00e7in <code>hibernate-jcache<\/code> ve <code>ehcache<\/code> ba\u011f\u0131ml\u0131l\u0131klar\u0131 genellikle yeterlidir. JCache (JSR-107) standard\u0131 \u00fczerinden EHCache&#8217;i kullanmak en modern yakla\u015f\u0131md\u0131r.<\/p>\n<pre><code class=\"language-xml\"><!-- Maven pom.xml -->\n<dependencies>\n    <!-- Hibernate Core -->\n    <dependency>\n        <groupId>org.hibernate<\/groupId>\n        <artifactId>hibernate-core<\/artifactId>\n        <version>5.6.15.Final<\/version> <!-- Kulland\u0131\u011f\u0131n\u0131z Hibernate versiyonuna g\u00f6re de\u011fi\u015ftirin -->\n    <\/dependency>\n\n    <!-- Hibernate JCache (JSR-107) entegrasyonu -->\n    <dependency>\n        <groupId>org.hibernate<\/groupId>\n        <artifactId>hibernate-jcache<\/artifactId>\n        <version>5.6.15.Final<\/version>\n    <\/dependency>\n\n    <!-- EHCache JCache sa\u011flay\u0131c\u0131s\u0131 -->\n    <dependency>\n        <groupId>org.ehcache<\/groupId>\n        <artifactId>ehcache<\/artifactId>\n        <version>3.10.8<\/version> <!-- En g\u00fcncel EHCache 3.x versiyonunu kullan\u0131n -->\n    <\/dependency>\n\n    <!-- SLF4J (EHCache loglama i\u00e7in, iste\u011fe ba\u011fl\u0131 ama \u00f6nerilir) -->\n    <dependency>\n        <groupId>org.slf4j<\/groupId>\n        <artifactId>slf4j-simple<\/artifactId>\n        <version>1.7.36<\/version>\n        <scope>runtime<\/scope>\n    <\/dependency>\n\n    <!-- Veritaban\u0131 s\u00fcr\u00fcc\u00fcs\u00fc (\u00f6rne\u011fin H2) -->\n    <dependency>\n        <groupId>com.h2database<\/groupId>\n        <artifactId>h2<\/artifactId>\n        <version>2.2.224<\/version>\n    <\/dependency>\n<\/dependencies><\/code><\/pre>\n<p><H3>Ad\u0131m 2: Hibernate Yap\u0131land\u0131rmas\u0131<\/H3><br \/>\n<code>hibernate.cfg.xml<\/code> veya Spring Boot kullan\u0131yorsan\u0131z <code>application.properties<\/code>\/<code>application.yml<\/code> dosyan\u0131zda Hibernate&#8217;in \u0130kinci Seviye \u00d6nbelle\u011fini ve EHCache&#8217;i etkinle\u015ftirin.<\/p>\n<pre><code class=\"language-xml\"><!-- hibernate.cfg.xml -->\n<hibernate-configuration>\n    <session-factory>\n        <!-- Veritaban\u0131 ba\u011flant\u0131 ayarlar\u0131 -->\n        <property name=\"hibernate.connection.driver_class\">org.h2.Driver<\/property>\n        <property name=\"hibernate.connection.url\">jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1<\/property>\n        <property name=\"hibernate.connection.username\">sa<\/property>\n        <property name=\"hibernate.connection.password\"><\/property>\n        <property name=\"hibernate.dialect\">org.hibernate.dialect.H2Dialect<\/property>\n\n        <!-- \u0130kinci Seviye \u00d6nbelle\u011fi etkinle\u015ftir -->\n        <property name=\"hibernate.cache.use_second_level_cache\">true<\/property>\n        \n        <!-- JCache (JSR-107) standard\u0131n\u0131 kullanarak \u00f6nbellek sa\u011flay\u0131c\u0131s\u0131n\u0131 belirt -->\n        <property name=\"hibernate.cache.region.factory_class\">org.hibernate.cache.jcache.JCacheRegionFactory<\/property>\n        \n        <!-- JCache yap\u0131land\u0131rma dosyas\u0131n\u0131n konumunu belirt (iste\u011fe ba\u011fl\u0131, varsay\u0131lan olarak classpath'te 'ehcache.xml' arar) -->\n        <property name=\"hibernate.javax.cache.uri\">classpath:\/ehcache.xml<\/property>\n\n        <!-- Sorgu \u00d6nbelle\u011fini etkinle\u015ftir (iste\u011fe ba\u011fl\u0131) -->\n        <property name=\"hibernate.cache.use_query_cache\">true<\/property>\n\n        <!-- Di\u011fer Hibernate ayarlar\u0131 -->\n        <property name=\"hibernate.hbm2ddl.auto\">update<\/property>\n        <property name=\"hibernate.show_sql\">true<\/property>\n        <property name=\"hibernate.format_sql\">true<\/property>\n\n        <!-- Varl\u0131k e\u015flemeleri (mapping) -->\n        <mapping class=\"com.example.entity.Product\"\/>\n    <\/session-factory>\n<\/hibernate-configuration><\/code><\/pre>\n<p>Spring Boot <code>application.properties<\/code> \u00f6rne\u011fi:<\/p>\n<pre><code class=\"language-properties\">spring.jpa.properties.hibernate.cache.use_second_level_cache=true\nspring.jpa.properties.hibernate.cache.region.factory_class=org.hibernate.cache.jcache.JCacheRegionFactory\nspring.jpa.properties.hibernate.javax.cache.uri=classpath:\/ehcache.xml\nspring.jpa.properties.hibernate.cache.use_query_cache=true<\/code><\/pre>\n<p><H3>Ad\u0131m 3: EHCache Yap\u0131land\u0131rmas\u0131<\/H3><br \/>\n<code>src\/main\/resources<\/code> dizinine <code>ehcache.xml<\/code> ad\u0131nda bir dosya olu\u015fturun ve \u00f6nbelleklerinizi yap\u0131land\u0131r\u0131n.<\/p>\n<pre><code class=\"language-xml\"><!-- ehcache.xml -->\n<config xmlns:xsi='http:\/\/www.w3.org\/2001\/XMLSchema-instance'\n        xmlns='http:\/\/www.ehcache.org\/v3'\n        xsi:schemaLocation='http:\/\/www.ehcache.org\/v3 http:\/\/www.ehcache.org\/schema\/ehcache-core-3.10.xsd'>\n\n    <service>\n        <jsr107:defaults xmlns:jsr107=\"http:\/\/www.ehcache.org\/v3\/jsr107\"\n                         enable-management=\"true\" enable-statistics=\"true\"\/>\n    <\/service>\n\n    <!-- Varsay\u0131lan \u00f6nbellek ayarlar\u0131 -->\n    <cache-template name=\"defaultTemplate\">\n        <expiry>\n            <ttl unit=\"seconds\">3600<\/ttl> <!-- 1 saat (Time To Live) -->\n        <\/expiry>\n        <resources>\n            <heap unit=\"entries\">1000<\/heap> <!-- Bellekte maksimum 1000 giri\u015f -->\n            <!-- <offheap unit=\"MB\">100<\/offheap> --> <!-- Heap d\u0131\u015f\u0131 bellek kullan\u0131m\u0131 (iste\u011fe ba\u011fl\u0131) -->\n            <!-- <disk persistent=\"false\" unit=\"GB\">1<\/disk> --> <!-- Diske ta\u015fma (iste\u011fe ba\u011fl\u0131) -->\n        <\/resources>\n    <\/cache-template>\n\n    <!-- Hibernate Entity'leri i\u00e7in \u00f6zel \u00f6nbellekler -->\n    <cache alias=\"com.example.entity.Product\" uses-template=\"defaultTemplate\">\n        <expiry>\n            <ttl unit=\"seconds\">1800<\/ttl> <!-- Product entity'leri i\u00e7in 30 dakika -->\n        <\/expiry>\n        <resources>\n            <heap unit=\"entries\">500<\/heap> <!-- Product i\u00e7in 500 giri\u015f -->\n        <\/resources>\n    <\/cache>\n\n    <!-- Hibernate koleksiyonlar\u0131 i\u00e7in \u00f6zel \u00f6nbellekler -->\n    <!-- \u00d6rne\u011fin, Product s\u0131n\u0131f\u0131ndaki 'reviews' koleksiyonu i\u00e7in -->\n    <cache alias=\"com.example.entity.Product.reviews\" uses-template=\"defaultTemplate\">\n        <expiry>\n            <ttl unit=\"seconds\">900<\/ttl> <!-- Koleksiyonlar i\u00e7in 15 dakika -->\n        <\/expiry>\n        <resources>\n            <heap unit=\"entries\">200<\/heap>\n        <\/resources>\n    <\/cache>\n\n    <!-- Hibernate sorgu \u00f6nbelle\u011fi i\u00e7in -->\n    <cache alias=\"org.hibernate.cache.internal.StandardQueryCache\" uses-template=\"defaultTemplate\">\n        <expiry>\n            <ttl unit=\"seconds\">600<\/ttl> <!-- Sorgu \u00f6nbelle\u011fi i\u00e7in 10 dakika -->\n        <\/expiry>\n        <resources>\n            <heap unit=\"entries\">100<\/heap>\n        <\/resources>\n    <\/cache>\n\n    <!-- Hibernate zaman damgas\u0131 \u00f6nbelle\u011fi (tutarl\u0131l\u0131k i\u00e7in) -->\n    <cache alias=\"org.hibernate.cache.internal.UpdateTimestampsCache\" uses-template=\"defaultTemplate\">\n        <expiry>\n            <ttl unit=\"seconds\">300<\/ttl> <!-- Zaman damgas\u0131 \u00f6nbelle\u011fi i\u00e7in 5 dakika -->\n        <\/expiry>\n        <resources>\n            <heap unit=\"entries\">500<\/heap>\n        <\/resources>\n    <\/cache>\n\n<\/config><\/code><\/pre>\n<p>*   <strong><code>cache-template<\/code>:<\/strong> Ortak ayarlar\u0131 tan\u0131mlamak i\u00e7in \u015fablonlar olu\u015fturman\u0131za olanak tan\u0131r.<br \/>\n*   <strong><code>cache alias<\/code>:<\/strong> \u00d6nbellekleri belirli Hibernate varl\u0131klar\u0131, koleksiyonlar\u0131 veya sorgu \u00f6nbelle\u011fi i\u00e7in adland\u0131rman\u0131z\u0131 sa\u011flar. Varl\u0131klar i\u00e7in tam nitelikli s\u0131n\u0131f ad\u0131n\u0131 kullan\u0131n.<br \/>\n*   <strong><code>expiry<\/code>:<\/strong> \u00d6nbellek giri\u015flerinin ne kadar s\u00fcreyle ge\u00e7erli olaca\u011f\u0131n\u0131 tan\u0131mlar (<code>ttl<\/code> &#8211; time to live).<br \/>\n*   <strong><code>resources<\/code>:<\/strong> \u00d6nbelle\u011fin kullanaca\u011f\u0131 kaynaklar\u0131 belirtir (heap belle\u011fi, disk vb.).<\/p>\n<p><H3>Ad\u0131m 4: Varl\u0131klar\u0131n ve Koleksiyonlar\u0131n \u00d6nbelle\u011fe Al\u0131nmas\u0131<\/H3><br \/>\n\u00d6nbelle\u011fe almak istedi\u011finiz Hibernate varl\u0131k s\u0131n\u0131flar\u0131n\u0131 ve koleksiyonlar\u0131 <code>@Cache<\/code> anotasyonu ile i\u015faretleyin.<\/p>\n<pre><code class=\"language-java\">\/\/ Product.java\npackage com.example.entity;\n\nimport org.hibernate.annotations.Cache;\nimport org.hibernate.annotations.CacheConcurrencyStrategy;\n\nimport javax.persistence.*;\nimport java.util.HashSet;\nimport java.util.Set;\n\n@Entity\n@Table(name = \"products\")\n\/\/ Bu varl\u0131\u011f\u0131 \u0130kinci Seviye \u00d6nbelle\u011fe al\n@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) \/\/ Varl\u0131k i\u00e7in \u00f6nbellek stratejisi\npublic class Product {\n\n    @Id\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\n    private Long id;\n\n    private String name;\n    private double price;\n\n    @OneToMany(mappedBy = \"product\", cascade = CascadeType.ALL, orphanRemoval = true)\n    \/\/ Koleksiyonu \u0130kinci Seviye \u00d6nbelle\u011fe al\n    @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) \/\/ Koleksiyon i\u00e7in \u00f6nbellek stratejisi\n    private Set<Review> reviews = new HashSet<>();\n\n    \/\/ Getter ve Setter'lar\n    \/\/ ...\n}<\/code><\/pre>\n<p><H3>\u00d6nbellek Stratejileri (<code>CacheConcurrencyStrategy<\/code>):<\/H3><br \/>\n*   <strong><code>READ_ONLY<\/code><\/strong>: Veriler asla de\u011fi\u015fmeyecekse kullan\u0131l\u0131r. En y\u00fcksek performansl\u0131 se\u00e7enektir. (\u00d6rn: Sabit kategoriler, \u00fclkeler)<br \/>\n*   <strong><code>NONSTRICT_READ_WRITE<\/code><\/strong>: Verilerin nadiren de\u011fi\u015fti\u011fi durumlarda kullan\u0131l\u0131r. Baz\u0131 durumlarda tutars\u0131z veri okumalar\u0131na yol a\u00e7abilir. Genellikle tavsiye edilmez.<br \/>\n*   <strong><code>READ_WRITE<\/code><\/strong>: Verilerin s\u0131k\u00e7a de\u011fi\u015febilece\u011fi durumlarda kullan\u0131l\u0131r. \u00d6nbellek giri\u015flerini g\u00fcncellemelerden sonra ge\u00e7ersiz k\u0131lar. En yayg\u0131n kullan\u0131lan stratejidir.<br \/>\n*   <strong><code>TRANSACTIONAL<\/code><\/strong>: JTA (Java Transaction API) ortamlar\u0131nda kullan\u0131l\u0131r ve \u00f6nbelle\u011fi veritaban\u0131 i\u015flemleriyle senkronize eder. En g\u00fcvenli ancak en yava\u015f stratejidir.<\/p>\n<p><H3>Ad\u0131m 5: Sorgu \u00d6nbelle\u011fi (Query Cache)<\/H3><br \/>\nS\u0131k\u00e7a tekrarlanan ve ayn\u0131 parametrelerle \u00e7a\u011fr\u0131lan sorgular\u0131n sonu\u00e7lar\u0131n\u0131 \u00f6nbelle\u011fe almak i\u00e7in Sorgu \u00d6nbelle\u011fi kullan\u0131labilir. Sorgu \u00f6nbelle\u011fi, sorgunun kendisini ve bu sorgunun d\u00f6nd\u00fcrd\u00fc\u011f\u00fc varl\u0131klar\u0131n kimliklerini (ID&#8217;lerini) saklar. Varl\u0131klar\u0131n kendileri yine \u0130kinci Seviye \u00d6nbellekten al\u0131n\u0131r.<\/p>\n<pre><code class=\"language-java\">\/\/ Sorgu \u00f6nbelle\u011fini kullanma \u00f6rne\u011fi\nSession session = sessionFactory.openSession();\nTransaction tx = null;\ntry {\n    tx = session.beginTransaction();\n\n    \/\/ Sorguyu \u00f6nbelle\u011fe al\n    List<Product> products = session.createQuery(\"FROM Product p WHERE p.price > :minPrice\", Product.class)\n            .setParameter(\"minPrice\", 50.0)\n            .setCacheable(true) \/\/ Bu sorgunun sonucunu \u00f6nbelle\u011fe al\n            .list();\n\n    \/\/ ...\n\n    tx.commit();\n} catch (Exception e) {\n    if (tx != null) tx.rollback();\n    e.printStackTrace();\n} finally {\n    session.close();\n}<\/code><\/pre>\n<p><strong>\u00d6nemli Not:<\/strong> Sorgu \u00f6nbelle\u011fi, <em>sorgu sonu\u00e7lar\u0131n\u0131<\/em> (yani varl\u0131k ID&#8217;lerini) \u00f6nbelle\u011fe al\u0131r. Bu ID&#8217;lere kar\u015f\u0131l\u0131k gelen varl\u0131klar, e\u011fer \u00f6nbelle\u011fe al\u0131nm\u0131\u015flarsa, \u0130kinci Seviye \u00d6nbellekten gelir. E\u011fer sorgunun d\u00f6nd\u00fcrd\u00fc\u011f\u00fc varl\u0131klar <code>@Cache<\/code> ile i\u015faretlenmemi\u015fse, her seferinde veritaban\u0131ndan \u00e7ekilecektir.<\/p>\n<h2>Optimizasyon ve Dikkat Edilmesi Gerekenler<\/h2>\n<p>Hibernate ve EHCache ile \u00f6nbellekleme yaparken performans\u0131 art\u0131rmak ve olas\u0131 sorunlar\u0131 \u00f6nlemek i\u00e7in baz\u0131 ipu\u00e7lar\u0131:<\/p>\n<p>*   <strong>Do\u011fru \u00d6nbellek Stratejisi Se\u00e7imi:<\/strong> Verinizin de\u011fi\u015fim s\u0131kl\u0131\u011f\u0131na g\u00f6re en uygun <code>@CacheConcurrencyStrategy<\/code>&#8216;yi se\u00e7mek \u00e7ok \u00f6nemlidir. <code>READ_ONLY<\/code> en h\u0131zl\u0131d\u0131r, ancak veri de\u011fi\u015firse tutars\u0131zl\u0131\u011fa yol a\u00e7ar. <code>READ_WRITE<\/code> \u00e7o\u011fu senaryo i\u00e7in iyi bir denge sunar.<br \/>\n*   <strong>EHCache Yap\u0131land\u0131rmas\u0131n\u0131 \u0130yi Ayarlay\u0131n:<\/strong><br \/>\n    *   <strong><code>expiry<\/code> (TTL\/TTI):<\/strong> <code>timeToLiveSeconds<\/code> (TTL) bir \u00f6\u011fenin \u00f6nbellekte kalabilece\u011fi maksimum s\u00fcredir. <code>timeToIdleSeconds<\/code> (TTI) bir \u00f6\u011fenin son eri\u015fiminden sonra ne kadar s\u00fcreyle \u00f6nbellekte kalabilece\u011fini belirler. Uygulaman\u0131z\u0131n veri de\u011fi\u015fim s\u0131kl\u0131\u011f\u0131na g\u00f6re bu de\u011ferleri optimize edin.<br \/>\n    *   <strong><code>resources<\/code> (Heap\/Offheap\/Disk):<\/strong> <code>heap<\/code> (bellek i\u00e7i) en h\u0131zl\u0131d\u0131r. Bellek s\u0131n\u0131rlar\u0131n\u0131za dikkat edin. B\u00fcy\u00fck veri k\u00fcmeleri i\u00e7in <code>offheap<\/code> veya <code>disk<\/code> se\u00e7enekleri kullan\u0131labilir, ancak bunlar performansta bir miktar d\u00fc\u015f\u00fc\u015fe neden olabilir.<br \/>\n    *   <strong>\u00d6nbellek Boyutlar\u0131:<\/strong> <code>maxEntriesLocalHeap<\/code> gibi ayarlar, \u00f6nbelle\u011fin bellekte tutaca\u011f\u0131 maksimum \u00f6\u011fe say\u0131s\u0131n\u0131 belirler. \u00c7ok k\u00fc\u00e7\u00fckse \u00f6nbellek isabet oran\u0131 d\u00fc\u015f\u00fck olur, \u00e7ok b\u00fcy\u00fckse bellek t\u00fcketimi artar. Uygulaman\u0131z\u0131n profilini \u00e7\u0131kararak optimum de\u011ferleri bulun.<br \/>\n*   <strong>Veri Tutarl\u0131l\u0131\u011f\u0131 ve Da\u011f\u0131t\u0131k Ortamlar:<\/strong> Tek bir uygulama \u00f6rne\u011fi i\u00e7in EHCache sorunsuz \u00e7al\u0131\u015f\u0131r. Ancak birden fazla uygulama sunucusu kullan\u0131yorsan\u0131z, her sunucunun kendi ba\u011f\u0131ms\u0131z \u00f6nbelle\u011fi olacakt\u0131r. Bir sunucudaki de\u011fi\u015fiklik di\u011fer sunucular\u0131n \u00f6nbelle\u011fini ge\u00e7ersiz k\u0131lmaz, bu da &#8220;stale data&#8221; sorunlar\u0131na yol a\u00e7ar. Bu durumda:<br \/>\n    *   <strong>Da\u011f\u0131t\u0131k EHCache:<\/strong> Terracotta ile EHCache&#8217;in da\u011f\u0131t\u0131k s\u00fcr\u00fcm\u00fcn\u00fc kullanabilirsiniz.<br \/>\n    *   <strong>Harici Da\u011f\u0131t\u0131k \u00d6nbellekler:<\/strong> Redis, Infinispan, Hazelcast gibi da\u011f\u0131t\u0131k \u00f6nbellek \u00e7\u00f6z\u00fcmlerini Hibernate&#8217;in JCache entegrasyonu \u00fczerinden kullanabilirsiniz. Bu, daha karma\u015f\u0131k bir yap\u0131land\u0131rma gerektirse de, veri tutarl\u0131l\u0131\u011f\u0131n\u0131 garanti eder.<br \/>\n*   <strong>Performans \u0130zleme:<\/strong> EHCache, JMX (Java Management Extensions) \u00fczerinden \u00f6nbellek istatistikleri (isabetler, ka\u00e7\u0131rmalar, \u00f6\u011fe say\u0131lar\u0131 vb.) sunar. Bu istatistikleri izleyerek \u00f6nbellek yap\u0131land\u0131rman\u0131z\u0131n etkinli\u011fini de\u011ferlendirin ve ayarlamalar yap\u0131n.<br \/>\n*   <strong>Ne Zaman \u00d6nbellekleme Yapmal\u0131, Ne Zaman Yapmamal\u0131:<\/strong><br \/>\n    *   <strong>Yapmal\u0131:<\/strong> S\u0131k\u00e7a okunan, nadiren yaz\u0131lan (y\u00fcksek okuma\/yazma oran\u0131) veriler i\u00e7in idealdir. (\u00d6rn: \u00dcr\u00fcn kataloglar\u0131, kullan\u0131c\u0131 profilleri, ayar parametreleri)<br \/>\n    *   <strong>Yapmamal\u0131:<\/strong> \u00c7ok s\u0131k de\u011fi\u015fen veriler (\u00f6nbellek ge\u00e7ersizle\u015ftirme maliyeti y\u00fcksek olur), \u00e7ok b\u00fcy\u00fck ve nadiren eri\u015filen veriler (bellek israf\u0131), veya g\u00fcvenlik a\u00e7\u0131s\u0131ndan hassas, her zaman g\u00fcncel olmas\u0131 gereken veriler (\u00f6rn: bankac\u0131l\u0131k i\u015flemleri).<br \/>\n*   <strong>Test Etme:<\/strong> \u00d6nbellekleme konfig\u00fcrasyonunuzu, performans testleri ve y\u00fck testleri ile dikkatlice test edin. Beklenmedik davran\u0131\u015flar\u0131 veya performans sorunlar\u0131n\u0131 erken a\u015famada tespit edin.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h2>\n<p>Hibernate&#8217;\u0131n \u0130kinci Seviye \u00d6nbelle\u011fi ve EHCache entegrasyonu, veritaban\u0131 tabanl\u0131 uygulamalar\u0131n performans\u0131n\u0131 ve \u00f6l\u00e7eklenebilirli\u011fini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rmak i\u00e7in g\u00fc\u00e7l\u00fc bir kombinasyondur. Do\u011fru yap\u0131land\u0131rma ve strateji se\u00e7imi ile, veritaban\u0131 \u00fczerindeki y\u00fck\u00fc azaltabilir, yan\u0131t s\u00fcrelerini k\u0131saltabilir ve daha iyi bir kullan\u0131c\u0131 deneyimi sunabilirsiniz. Ancak, \u00f6nbellekleme her derde deva bir \u00e7\u00f6z\u00fcm de\u011fildir ve dikkatli bir planlama, yap\u0131land\u0131rma ve test gerektirir.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p><H3>S: Birinci ve \u0130kinci Seviye \u00d6nbellek aras\u0131ndaki temel fark nedir?<\/H3><br \/>\nC: Birinci Seviye \u00d6nbellek, <code>Session<\/code>&#8216;a \u00f6zeldir ve oturum kapand\u0131\u011f\u0131nda temizlenir. \u0130kinci Seviye \u00d6nbellek ise <code>SessionFactory<\/code>&#8216;ye ba\u011fl\u0131d\u0131r, t\u00fcm oturumlar aras\u0131nda payla\u015f\u0131l\u0131r ve daha kal\u0131c\u0131d\u0131r.<\/p>\n<p><H3>S: Hangi \u00f6nbellek stratejisini (<code>CacheConcurrencyStrategy<\/code>) se\u00e7meliyim?<\/H3><br \/>\nC:<br \/>\n*   <code>READ_ONLY<\/code>: Veriler asla de\u011fi\u015fmeyecekse.<br \/>\n*   <code>READ_WRITE<\/code>: Veriler de\u011fi\u015febilir ve tutarl\u0131l\u0131k \u00f6nemliyse (en yayg\u0131n).<br \/>\n*   <code>NONSTRICT_READ_WRITE<\/code>: Veriler nadiren de\u011fi\u015firse ve k\u00fc\u00e7\u00fck tutars\u0131zl\u0131klar kabul edilebilir.<br \/>\n*   <code>TRANSACTIONAL<\/code>: JTA ortamlar\u0131nda en y\u00fcksek tutarl\u0131l\u0131k gerekiyorsa.<\/p>\n<p><H3>S: Da\u011f\u0131t\u0131k bir ortamda EHCache nas\u0131l kullan\u0131l\u0131r?<\/H3><br \/>\nC: Tek ba\u015f\u0131na EHCache da\u011f\u0131t\u0131k ortamlar i\u00e7in veri tutarl\u0131l\u0131\u011f\u0131 sa\u011flamaz. Bu durumda Terracotta ile da\u011f\u0131t\u0131k EHCache kullanabilir veya Redis, Infinispan gibi harici da\u011f\u0131t\u0131k \u00f6nbellek \u00e7\u00f6z\u00fcmlerini Hibernate&#8217;in JCache entegrasyonu \u00fczerinden yap\u0131land\u0131rabilirsiniz.<\/p>\n<p><H3>S: Sorgu \u00f6nbelle\u011fi her zaman iyi bir fikir midir?<\/H3><br \/>\nC: Hay\u0131r. S\u0131k\u00e7a ayn\u0131 parametrelerle \u00e7a\u011fr\u0131lan, sonu\u00e7lar\u0131 s\u0131k de\u011fi\u015fmeyen sorgular i\u00e7in \u00e7ok faydal\u0131d\u0131r. Ancak s\u0131k de\u011fi\u015fen sorgular veya \u00e7ok farkl\u0131 parametrelerle \u00e7a\u011fr\u0131lan sorgular i\u00e7in \u00f6nbellek isabet oran\u0131 d\u00fc\u015f\u00fck olur ve \u00f6nbellek y\u00f6netimi ek y\u00fck getirebilir. Ayr\u0131ca, sorgu \u00f6nbelle\u011fi sadece varl\u0131k ID&#8217;lerini saklar; varl\u0131klar\u0131n kendileri i\u00e7in de \u0130kinci Seviye \u00d6nbelle\u011fi etkinle\u015ftirmeniz gerekir.<\/p>\n<p><H3>S: \u00d6nbelle\u011fi ne zaman devre d\u0131\u015f\u0131 b\u0131rakmal\u0131y\u0131m?<\/H3><br \/>\nC:<br \/>\n*   Veri \u00e7ok s\u0131k de\u011fi\u015fiyorsa ve her zaman en g\u00fcncel veriye ihtiyac\u0131n\u0131z varsa.<br \/>\n*   Bellek kullan\u0131m\u0131n\u0131n kritik oldu\u011fu ve \u00f6nbelle\u011fin \u00e7ok b\u00fcy\u00fck veriler tutaca\u011f\u0131 durumlarda.<br \/>\n*   Uygulaman\u0131zda performans darbo\u011faz\u0131 veritaban\u0131ndan de\u011fil, ba\u015fka bir bile\u015fenden kaynaklan\u0131yorsa.<br \/>\n*   Uygulaman\u0131z\u0131n zaten \u00e7ok az veritaban\u0131 sorgusu yapt\u0131\u011f\u0131 ve \u00f6nbelleklemenin getirece\u011fi ek karma\u015f\u0131kl\u0131\u011fa de\u011fmeyece\u011fi durumlarda.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Giri\u015f\nModern web uygulamalar\u0131nda performans, kullan\u0131c\u0131 deneyimi ve sistem kaynaklar\u0131n\u0131n verimli kullan\u0131m\u0131 a\u00e7\u0131s\u0131ndan kritik bir \u00f6neme sa","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-33722","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Hibernate EHCache - Hibernate Second Level Cache - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/hibernate-ehcache-hibernate-second-level-cache\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Hibernate EHCache - Hibernate Second Level Cache\" \/>\n<meta property=\"og:description\" content=\"Giri\u015f Modern web uygulamalar\u0131nda performans, kullan\u0131c\u0131 deneyimi ve sistem kaynaklar\u0131n\u0131n verimli kullan\u0131m\u0131 a\u00e7\u0131s\u0131ndan kritik bir \u00f6neme sa\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/hibernate-ehcache-hibernate-second-level-cache\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-06T05:41:38+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/hibernate-ehcache-hibernate-second-level-cache\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/hibernate-ehcache-hibernate-second-level-cache\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Hibernate EHCache &#8211; Hibernate Second Level Cache\",\"datePublished\":\"2025-11-06T05:41:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/hibernate-ehcache-hibernate-second-level-cache\/\"},\"wordCount\":2022,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/hibernate-ehcache-hibernate-second-level-cache\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/hibernate-ehcache-hibernate-second-level-cache\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/hibernate-ehcache-hibernate-second-level-cache\/\",\"name\":\"Hibernate EHCache - Hibernate Second Level Cache - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-06T05:41:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/hibernate-ehcache-hibernate-second-level-cache\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/hibernate-ehcache-hibernate-second-level-cache\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/hibernate-ehcache-hibernate-second-level-cache\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Hibernate EHCache &#8211; Hibernate Second Level Cache\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Hibernate EHCache - Hibernate Second Level Cache - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/hibernate-ehcache-hibernate-second-level-cache\/","og_locale":"tr_TR","og_type":"article","og_title":"Hibernate EHCache - Hibernate Second Level Cache","og_description":"Giri\u015f Modern web uygulamalar\u0131nda performans, kullan\u0131c\u0131 deneyimi ve sistem kaynaklar\u0131n\u0131n verimli kullan\u0131m\u0131 a\u00e7\u0131s\u0131ndan kritik bir \u00f6neme sa","og_url":"https:\/\/fatihsoysal.com\/blog\/hibernate-ehcache-hibernate-second-level-cache\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-06T05:41:38+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"12 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/hibernate-ehcache-hibernate-second-level-cache\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/hibernate-ehcache-hibernate-second-level-cache\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Hibernate EHCache &#8211; Hibernate Second Level Cache","datePublished":"2025-11-06T05:41:38+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/hibernate-ehcache-hibernate-second-level-cache\/"},"wordCount":2022,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/hibernate-ehcache-hibernate-second-level-cache\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/hibernate-ehcache-hibernate-second-level-cache\/","url":"https:\/\/fatihsoysal.com\/blog\/hibernate-ehcache-hibernate-second-level-cache\/","name":"Hibernate EHCache - Hibernate Second Level Cache - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-06T05:41:38+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/hibernate-ehcache-hibernate-second-level-cache\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/hibernate-ehcache-hibernate-second-level-cache\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/hibernate-ehcache-hibernate-second-level-cache\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Hibernate EHCache &#8211; Hibernate Second Level Cache"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33722","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=33722"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33722\/revisions"}],"predecessor-version":[{"id":33723,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33722\/revisions\/33723"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=33722"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=33722"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=33722"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}