Sobes.tech
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:

  1. 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.
  2. Ə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ı.
  3. 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.
  4. 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
        }
    }
    
  5. 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.
  6. 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.
  7. 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.
  8. 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.