Ehcache ile kullanılan bazı önemli parametreleri yazıyorum
Ehcache ve Hibernate İlişkisi
Bu ilişki aşağıdaki gibi
Ehcache ve Önbellek Erişim Stratejisi
Aşağıdaki şekilde entity ve önbellek erişim stratejisi arasındaki ilişkiyi görmek mümkün. Manipulating Hibernate 2nd Level Cache sorusuna da göz atmakta fayda var.
Ehcache ve Terracota ile Dağıtık Bir Önbellek
Bulabildiğim en iyi örnek So you want Distributed, Scalable and Highly Available Cache? sayfasında mevcut.
Önbellekte Temizlik
eternal : Eğer eternal = false ise önbellekteki nesne temizlenebilir anlamına geliyor. True atanırsa temizlik yapılmaz.
timeToIdleSeconds : Bir eleman belirtilen saniye kadar kullanılmazsa önbellekten çıkarılır.
timeToLiveSeconds : Bir eleman belirtilen saniye kadar önbellekte tutulduktan sonra önbellekten çıkarılır.
Burada dikkat edilmesi gereken nokta timeToLiveSeconds alanının zaman üst sınırını belirlemesidir. Örneğin, önbellekteki bir elemana sürekli erişim olsa, timeToIdleSeconds devreye girmez, ancak timeToLiveSeconds dolunca eleman önbellekten çıkarılır.Bu konu ile ilgili olarak Ehcache Element lifetime in cache başlıklı yazıya göz atabilirsiniz
memoryStoreEvictionPolicy : LRU ile temizlik yaparken elemanların kaç defa erişildiğine değil zaman sıralamasında kullanım zamanı en eski olan elemanlar önbellekten çıkarılır. LFU ile elemanların kaç defa erişildiği sayılır ve zamana bakmaksızın en az kullanılmış olan eleman önbellekten çıkarılır
Ehcache önbellekten çıkartma işlemleri için thread kullanıyor. Bu tasarım tercihi diğer bazı önbellek kütüphanelerinde kullanılmamış. Örneğin How does Guava expire entries in its CacheBuilder? başlıklı yazıda,
önbelleği boşaltma işleminin gerçekleşmesi için önbelleğe erişim (expireAfterAccess) veya yazma (expireAfterWrite) yöntemlerinden birisinin tercih edilebileceği yazılmış.
DiskStore Önbellekte Temizlik
diskPersistent : Diskte bulunan verinin ehcache kapatılıp tekrar açılırken sıfırlanıp sıfırlanmaması gerektiğini belirtir.
Aşağıdaki şekli buradan aldım
Tüm Önbelleği Manuel Olarak Temizleme
Bu işlemi yapmanın yöntemi Hibernate 2nd level cache invalidation when another process modifies the database sorusunda anlatılmış.
MemoryStore Önbellek Saklama Büyüklüğü
maxElementsInMemory :Bu değer artık kullanılmıyor. Onun yerine maxEntriesLocalHeap kullanılıyor.
maxEntriesLocalHeap : RAM üzerindeki önbellekte kaç tane eleman saklanabileceğini kontrol eder. Böylece fazla RAM kullanılmasının önüne geçilebilir.
overflowToDisk : RAM önbelleğine sığmayan elemanların diske yazılıp yazılmayacağını kontrol eder. Eğer true atanmış ise diskStore değişkeninde atanış olan dizin saklama alanı olarak kullanılır.
DiskStore Önbellek Saklama Büyüklüğü
maxElementsOnDisk : Bu değer artık kullanılmıyor. Onun yerine maxEntriesLocalDisk kullanılıyor.
maxEntriesLocalDisk : Disk üzerindeki önbellekte kaç tane eleman saklanabileceğini kontrol eder. Böylece fazla disk alanı kullanılmasının önüne geçilebilir.
Disk ve hafızadaki elemanları sayısını görmek Statistics sınıfı aşağıdaki gibi kullanılabilir.
DiskStore Dizini
diskStore : Diske taşan elemanlar diskStore önbelleğine yazılırken bu önbellek için diskte bir dizin belirtmek gerekir.
Çoğunlukla <diskStore path="java.io.tmpdir"/> şeklinde kullanılır. Böylece disk önbelleği Windows'ta c:/windows/temp gibi bir dizine yazılır
diskPersistent : JVM tekrar başlatılınca diskStore önbelleğinin boşaltılarak mı yoksa boşaltılmadan mı tekrar kullanılacağını belirtir.
diskSpoolBufferSizeMB : Diske yazılacak elemanlar hemen yazılmak yerine önce biriktirilebilirler. Aynen bir yazıcı kuyruğunda olduğu gibi zamanı geldikçe asenkron olarak diske yazmak için spool/bekletme kuyruğunun büyüklüğü megabyte cinsinden ayarlanabilir.
diskExpiryThreadIntervalSeconds : Saniye cinsinden disk önbelleğini temizleyen thread'in çalışma sıklığını belirtir.
Terracota Cluster
terracotta clustered : true ise ehcache cluster şekilnde kullanılır
Ehcache UpdateCheck
Ehcache otomatik olarak daha günce bir sürüm olup olmadığını kontrol ediyor. Bu kontrolü durdurmak için
Ehcache defaultCache
defaultCache ayarlarında Hibernate gibi ORM uygulamaları aracılığıyla CacheManager sınıfını kullanarak bir önbellek alanı yaratılmak istenirse kullanılacak parametre değerleri tutulur.
Dikkat edilmesi gereken husus defaultCache ayarlarının aynı Xml içinde bulunan diğer cache tanımlarına uygulanmamasıdır. Do caches in ehcache.xml inherit from defaultCache? sorusunda benzer bir cevap veriliyor.
Ehcache ve Hibernate İlişkisi
Bu ilişki aşağıdaki gibi
Ehcache ve Önbellek Erişim Stratejisi
Aşağıdaki şekilde entity ve önbellek erişim stratejisi arasındaki ilişkiyi görmek mümkün. Manipulating Hibernate 2nd Level Cache sorusuna da göz atmakta fayda var.
Ehcache ve Terracota ile Dağıtık Bir Önbellek
Bulabildiğim en iyi örnek So you want Distributed, Scalable and Highly Available Cache? sayfasında mevcut.
Önbellekte Temizlik
eternal : Eğer eternal = false ise önbellekteki nesne temizlenebilir anlamına geliyor. True atanırsa temizlik yapılmaz.
timeToIdleSeconds : Bir eleman belirtilen saniye kadar kullanılmazsa önbellekten çıkarılır.
timeToLiveSeconds : Bir eleman belirtilen saniye kadar önbellekte tutulduktan sonra önbellekten çıkarılır.
Burada dikkat edilmesi gereken nokta timeToLiveSeconds alanının zaman üst sınırını belirlemesidir. Örneğin, önbellekteki bir elemana sürekli erişim olsa, timeToIdleSeconds devreye girmez, ancak timeToLiveSeconds dolunca eleman önbellekten çıkarılır.Bu konu ile ilgili olarak Ehcache Element lifetime in cache başlıklı yazıya göz atabilirsiniz
memoryStoreEvictionPolicy : LRU ile temizlik yaparken elemanların kaç defa erişildiğine değil zaman sıralamasında kullanım zamanı en eski olan elemanlar önbellekten çıkarılır. LFU ile elemanların kaç defa erişildiği sayılır ve zamana bakmaksızın en az kullanılmış olan eleman önbellekten çıkarılır
Ehcache önbellekten çıkartma işlemleri için thread kullanıyor. Bu tasarım tercihi diğer bazı önbellek kütüphanelerinde kullanılmamış. Örneğin How does Guava expire entries in its CacheBuilder? başlıklı yazıda,
önbelleği boşaltma işleminin gerçekleşmesi için önbelleğe erişim (expireAfterAccess) veya yazma (expireAfterWrite) yöntemlerinden birisinin tercih edilebileceği yazılmış.
DiskStore Önbellekte Temizlik
diskPersistent : Diskte bulunan verinin ehcache kapatılıp tekrar açılırken sıfırlanıp sıfırlanmaması gerektiğini belirtir.
Aşağıdaki şekli buradan aldım
Tüm Önbelleği Manuel Olarak Temizleme
Bu işlemi yapmanın yöntemi Hibernate 2nd level cache invalidation when another process modifies the database sorusunda anlatılmış.
MemoryStore Önbellek Saklama Büyüklüğü
maxElementsInMemory :Bu değer artık kullanılmıyor. Onun yerine maxEntriesLocalHeap kullanılıyor.
maxEntriesLocalHeap : RAM üzerindeki önbellekte kaç tane eleman saklanabileceğini kontrol eder. Böylece fazla RAM kullanılmasının önüne geçilebilir.
overflowToDisk : RAM önbelleğine sığmayan elemanların diske yazılıp yazılmayacağını kontrol eder. Eğer true atanmış ise diskStore değişkeninde atanış olan dizin saklama alanı olarak kullanılır.
DiskStore Önbellek Saklama Büyüklüğü
maxElementsOnDisk : Bu değer artık kullanılmıyor. Onun yerine maxEntriesLocalDisk kullanılıyor.
maxEntriesLocalDisk : Disk üzerindeki önbellekte kaç tane eleman saklanabileceğini kontrol eder. Böylece fazla disk alanı kullanılmasının önüne geçilebilir.
Disk ve hafızadaki elemanları sayısını görmek Statistics sınıfı aşağıdaki gibi kullanılabilir.
DiskStore Dizini
diskStore : Diske taşan elemanlar diskStore önbelleğine yazılırken bu önbellek için diskte bir dizin belirtmek gerekir.
Çoğunlukla <diskStore path="java.io.tmpdir"/> şeklinde kullanılır. Böylece disk önbelleği Windows'ta c:/windows/temp gibi bir dizine yazılır
diskPersistent : JVM tekrar başlatılınca diskStore önbelleğinin boşaltılarak mı yoksa boşaltılmadan mı tekrar kullanılacağını belirtir.
diskSpoolBufferSizeMB : Diske yazılacak elemanlar hemen yazılmak yerine önce biriktirilebilirler. Aynen bir yazıcı kuyruğunda olduğu gibi zamanı geldikçe asenkron olarak diske yazmak için spool/bekletme kuyruğunun büyüklüğü megabyte cinsinden ayarlanabilir.
diskExpiryThreadIntervalSeconds : Saniye cinsinden disk önbelleğini temizleyen thread'in çalışma sıklığını belirtir.
Terracota Cluster
terracotta clustered : true ise ehcache cluster şekilnde kullanılır
Ehcache UpdateCheck
Ehcache otomatik olarak daha günce bir sürüm olup olmadığını kontrol ediyor. Bu kontrolü durdurmak için
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="false">şeklinde bir xml tanımı kullanmak lazım.
Ehcache defaultCache
defaultCache ayarlarında Hibernate gibi ORM uygulamaları aracılığıyla CacheManager sınıfını kullanarak bir önbellek alanı yaratılmak istenirse kullanılacak parametre değerleri tutulur.
Dikkat edilmesi gereken husus defaultCache ayarlarının aynı Xml içinde bulunan diğer cache tanımlarına uygulanmamasıdır. Do caches in ehcache.xml inherit from defaultCache? sorusunda benzer bir cevap veriliyor.