You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Cache , uygulamamızın performansını artırmak için kullandığımız yöntemlerdir .
Örneğin , veri tabanına bir sorgu atıyoruz . Gelene verileri ilk olarak önbelleğe yazıyoruz .
Daha sonra kullanıcıya gösteriyoruz . Eğer kullanıcı daha sonra aynı sorguyu çalıştırırsa veri tabanına
gitmek yerine verileri önbellekten alıyoruz .
Neden Cache Kullanmalıyız ?
Önbelek kullanmanın birinci nedeni , veri erişimini daha hızlı hale getirmek .
Çok istenen kaynak birden çok kez istendiğinde geliştiricinin hızlı bir şekilde cevap verebilmesi
için önbelleğe alması genellikle yararlıdır.
Bellekten veri erişimi , veri tabanından veri almaya kıyasla her zaman daha hızlıdır.
Nasıl Aktif Edilir ?
Bu özelliği aktif etmek için Main metoduna @EnableCaching anotasyonu eklenir .
@SpringBootApplication
@EnableCaching
public class SpringBootCachingApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootCachingApplication.class, args);
}
}
Bilmemiz Gereken Bazı Anotasyonlar
@Cacheable("cacheName")
@CacheEvict("cacheName")
@CachePut("cacheName")
@Caching()
@Cacheable() ?
Daha önce ilgili key değerine (cacheName) değer yazılmamışsa önce belleğe yazılır . Daha sonra
kullanıcıya ilgili değerleri döner. Eğer önbellekle ilgili bilgi varsa önbellekten çağrılacaktır .
Yukardaki örnekte bir kullanıcı listemizin olduğunu varsayalım . Bu listeyi ilk çektiğimizde veri tabanında
listeler gelecektir . Daha sonra aynı listeyi tekrar çektiğimizde bu sefer önbellekten gelecektir . Ve daha kısa sürede gelecektir .
@CacheEvict() ?
Önbellekte ilgili key ile yazılmış değer varsa onu silecektir .
Örneğin @Cacheable("users") adında bir metot çağırdık ve önbelleğe kullanıcı listesi yazdırdı . Daha sonra
@CacheEvict("users") ifadesi olarak metodu çağırırsak , bellekteki kullanıcı listesini silercektir.
@DeleteMapping("/delete/{id}")
@CacheEvict(value = "cacheUsers",key = "#id")
public void deleteUser(@PathVariable("id") Long id) {
userService.deleteUser(id);
}
Yukardaki örnekte key vererek kısıtlama yaptık verdiğimiz id deki kullanıcıları bellekten silecektir.
@CachePut() ?
Eğer bir metodun her defasında çalışmasını istiyorsak kullanırız . Bu sayede önbellekte her zaman en güncel veriler olacaktır .
@Caching() ?
Aynı yöntemde aynı anda hem @CachePut hem de @CacheEvict ek açıklamalarına ihtiyacımız olduğunda kullanırız .
Yani kısacası aynı türde birden fazla açıklama kullanmak istediğimizde kullanırız .