
Bir web uygulamasında
Session ve
Cache
nesnesi arasında tercih yapacağını ve bu tercihini neye göre
belirleyeceğini merak eden bir okuruma yazdığım cevap üzerine blogumda
da bu iki nesne üzerine birşeyler yazmaya karar verdim. Zira geçtiğimiz
günlerde yazgelistir.com'un forumunda da buna benzer bir başlık
görmüştüm. Aslında karşılaştırma yapmaktan ziyade bazı programcı
arkadaşların bu iki nesneyi yanlış tanıdıkları için bu yanlış
anlaşılmayı biraz olsun düzeltmek niyetindeyim.
Session ve Cache
kullanım amaçları bakımından birbirinden tamamen farklı nesnelerdir
dersem yanlış olmaz. Zira Session tarayıcıya bağımlı olarak bir
kullanıcı ile ilgili bilgiler saklayabileceğimiz bir nesne iken, Cache
tüm kullanıcıların erişebileceği ve uygulamada performans kazancı
sağlamak için kullanabileceğimiz bir nesnedir. Session nesnesindeki tek
amaç belirli bir süreliğine bir değeri veya nesneyi saklamaktır ve
performans adına herhangi bir getirisi olmayacaktır. Cache'deki en
temel amaç ise performanstır. Dilerseniz şöyle madde madde bir bakalım
Session ve Cache arasındaki farklılıklara:
Session
-
Kullanıcı ile ilişkili verileri saklar. Her kullanıcının bilgisi
bellekte farklı bir alanda saklanır. O an sitede 20 kullanıcı var ise
20 tane farklı Session nesnesi bellekte saklanır. Bir kullanıcı
sitedeki diğer kullanıcının Session bilgisine ulaşamaz.
- Genellikle
kullanıcı adı veya açılan oturum ile ilgili bilgiler saklanır. Bu
bilgiler her kullanıcı için saklanacağı için büyük boyutta olmaması
gerekir.
- Bilgiler varsayılan olarak
sunucunun belleğinde (InProc modu) saklanır. Eğer istenilirse
SQL Server veritabanında (SQLServer modu) veya
başka bir sunucunun belleğinde (StateServer modu) saklanabilir.
-
Varsayılan olarak Session nesnelerinin yaşam süreleri 20 dakikadır.
Kullanıcı sistemden çıkış yapar ise veya 20 dakika boyunca aktif
olmazsa Session nesneleri bellekten kaldırılır. Eğer istenilirse bu
süre değiştirilebilir. (web.config dosyasında sessionState düğümünden)
- Performans açısından herhangi bir kazanç
sağlamaz. Fakat durum yönetimi adına kullanıcıyı tanımamız ve buna göre işlemler yapmamız adına kolaylıklar sağlar.
Cache
- Kullanıcıya özel bilgi saklamaz. Saklanan veriye aynı anda tüm kullanıcılar erişebilir. Sitede 20 kullanıcı var ise
20 tane Cache nesnesi değil 1 tane Cache nesnesi saklanır. (En sık karıştırılan noktalardan biri burası)
-
Genellikle bir sayfanın tamamının HTML kodları (output caching), bir
sayfanın belirli bir kısmının HTML kodları (fragment caching) veya
DataTable gibi bir nesne (data caching) Cache nesnesinde saklanır.
- Bilgiler
sunucunun belleğinde
saklanır. Bu veriler ASP.NET tarafından yönetilir. Hatta Cache'e
eklenecek nesnelere öncelik ataması yapılarak gerektiğinde ASP.NET'in
hangi Cache nesnelerini öncelikli olarak bellekten kaldıracağı
belirlenebilir.
- Zamana bağımlı olarak veriler Cache'de
saklanabileceği gibi nesnenin değişim durumunda göre veya dosya-klasör
içeriğinin değişimine bağımlı olarakta değerler saklanabilir.
-
Performans kazancı sağlamak amacıyla kullanılır. Bir nesneyi veya bir
sayfayı tekrar tekrar üretmek sunucuya belirli bir yük getiriyorsa
nesne veya sayfa bellekte saklanarak sayfaların daha hızlı
çalıştırılması sağlanır.
Görüldüğü gibi Session ve Cache farklı
amaçlar için kullanabileceğimiz nesnelerdir. Session yerine Cache,
Cache yerine Session kullanmak teoride olabilse de pratikte
kullanılmaz, en azından benim aklıma kullanılabileceği bir yer gelmiyor.