11 Haziran 2012 Pazartesi

Ehcache

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 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.