Middle
Keş səviyyələri haqqında danış.
sobes.tech Süni İntellekt
AI-dan cavab
Java-da keşik müxtəlif səviyyələrdə həyata keçirilə bilər, hər birinin öz xüsusiyyətləri və performans ilə məlumatların aktuallığı arasında kompromisləri var.
Əsas keşik səviyyələri:
-
Prosessor Keşi (CPU Cache):
- L1, L2, L3 keşikləri, birbaşa prosessor çipində yerləşir.
- Ən sürətli, amma ən kiçik keşik.
- Avadanlıq tərəfindən idarə olunur, standart Java API vasitəsilə birbaşa proqram nəzarətinə əlçatan deyil.
-
Əməliyyat Sistemi Keşi:
- Fayllara, şəbəkə soketlərinə və digər əməliyyat sistemi resurslarına giriş keşikləşdirilir.
- OS tərəfindən idarə olunur. Java tətbiqi onunla dolayı əlaqə qurur vasitəsilə sistem çağırışları.
-
Java Virtual Machine Keşi (JVM Cache):
- JIT-kompilyator tərtib olunmuş kodu keşikləşdirir.
- JVM daxili optimizasiyaları (məsələn, String Pool keşikləşdirilməsi).
- Kısmen JVM bayraqları vasitəsilə idarə olunur, əsasən avtomatlaşdırılmışdır.
-
Yaddaşda Tətbiq Keşi (In-Memory Application Cache):
- Java prosesinin yaddaşında yerləşir.
- Ən yaygın məlumat keşik səviyyəsidir, inkişaf etdirici tərəfindən idarə olunur.
- Tez-tez istifadə olunan obyektlər və ya sorğu nəticələrinin saxlanması üçün istifadə olunur.
- Kitabxana nümunələri: Guava Cache, Ehcache, Caffeine.
- Lokal (bir JVM daxilində) və ya paylanmış (bir neçə JVM arasında) ola bilər.
// Guava ilə Yaddaş Keşi nümunəsi import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import java.util.concurrent.TimeUnit; public class DataCache { private final LoadingCache<String, String> dataCache; public DataCache() { dataCache = CacheBuilder.newBuilder() .maximumSize(100) // Maksimum element sayı .expireAfterWrite(10, TimeUnit.MINUTES) // Yazıldıqdan sonra ömrü .build(new CacheLoader<String, String>() { @Override public String load(String key) throws Exception { // Cache-də olmayan məlumatların yüklənməsi loqikası System.out.println("Loading data for key: " + key); return fetchDataFromDatabase(key); // Məlumatların alınmasının simulasyonu } }); } public String getData(String key) { try { return dataCache.get(key); } catch (Exception e) { e.printStackTrace(); return null; // Xəta emalı } } private String fetchDataFromDatabase(String key) { // Gecikmə və xarici mənbədən məlumat alınması simulasyonu try { Thread.sleep(100); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } return "Data for " + key; } public static void main(String[] args) { DataCache cache = new DataCache(); System.out.println(cache.getData("key1")); // Mənbədən yükləmə, cache-ə yazma System.out.println(cache.getData("key1")); // Cache-dən oxuma } } -
Verilənlər Bazası Keşi:
- Sorğular və məlumatların verilənlər bazası tərəfində keşikləşdirilməsi.
- DBMS tərəfindən həyata keçirilir.
-
Paylanmış Keş:
- Bir neçə server və ya nod arasında paylanmış keşik.
- Klaster tətbiqlərdə məlumatların paylaşılması və miqyaslandırma üçün istifadə olunur.
- Nümunələr: Redis, Memcached, Apache Ignite.
- Nodalardakı məlumatların uyğunluğunun təminatı üçün həllər tələb edir.
-
Veb Server/API Gateway Keşi:
- Veb server səviyyəsində keşiklər (məsələn, Nginx, Apache) və ya API Gateway.
- HTTP/API cavablarının keşikləşdirilməsi.
-
Brauzer Keşi:
- İstifadəçinin brauzerində statik resursların (HTML, CSS, JS, şəkillər) keşi.
- HTTP başlıqları vasitəsilə idarə olunur (Cache-Control, Expires).
Keş səviyyəsinin seçimi məlumatların növündən, aktuallıq tələblərindən, məlumat həcmi, miqyaslandırma və həyata keçirmə mürəkkəbliyindən asılıdır. Tətbiqdə çox vaxt bir neçə səviyyənin birləşməsi istifadə olunur.