Sobes.tech
Middle

Kesh qatlamlari haqida gapirib bering.

sobes.tech AI

AIdan javob

Java-da kesh qilish turli darajalarda amalga oshirilishi mumkin, har biri o'z xususiyatlari va ma'lumotlarning ishlash tezligi va dolzarbligi o'rtasidagi muvozanat bilan.

Asosiy kesh darajalari:

  1. Protsessor kesh (CPU Cache):

    • L1, L2, L3 keshlar, to'g'ridan-to'g'ri protsessor chipida joylashgan.
    • Eng tez, lekin eng kichik.
    • Xavfsizlik bilan boshqariladi, Java API orqali to'g'ridan-to'g'ri dasturlash nazorati uchun mavjud emas.
  2. Operatsion tizim kesh:

    • Fayllarga, tarmoq soketlariga va boshqa operatsion tizim resurslariga kirishni kesh qiladi.
    • OS tomonidan boshqariladi. Java ilovasi unga sistem chaqiruvlari orqali bilvosita ta'sir qiladi.
  3. Java Virtual Mashina kesh (JVM Cache):

    • JIT kompilyatori kompilyatsiya qilingan kodni kesh qiladi.
    • JVM ichki optimallashtirishlari (masalan, String Pool kesh qilish).
    • JVM bayroqlari orqali qisman boshqariladi, asosan avtomatlashtirilgan.
  4. Ilova ichki xotira kesh (In-Memory Application Cache):

    • Java ilovasi jarayonining RAMida joylashgan.
    • Eng keng tarqalgan ma'lumotlar kesh darajasi, dasturchi tomonidan boshqariladi.
    • Ko'p ishlatiladigan ob'ektlar yoki so'rov natijalarini saqlash uchun ishlatiladi.
    • Kutubxonalar misollari: Guava Cache, Ehcache, Caffeine.
    • Mahalliy (bir JVM doirasida) yoki tarqatilgan (bir nechta JVM o'rtasida) bo'lishi mumkin.
    // Guava bilan ichki xotira kesh misoli
    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) // Maksimal elementlar soni
                .expireAfterWrite(10, TimeUnit.MINUTES) // Yozilganidan keyin yashash vaqti
                .build(new CacheLoader<String, String>() {
                    @Override
                    public String load(String key) throws Exception {
                        // Ma'lumotlarni yuklash logikasi, agar cacheda bo'lmasa
                        System.out.println("Kalit uchun ma'lumotlar yuklanmoqda: " + key);
                        return fetchDataFromDatabase(key); // Ma'lumotlarni olishni simulyatsiya qilish
                    }
                });
        }
    
        public String getData(String key) {
            try {
                return dataCache.get(key);
            } catch (Exception e) {
                e.printStackTrace();
                return null; // Xatoliklarni boshqarish
            }
        }
    
        private String fetchDataFromDatabase(String key) {
            // Kechikish va tashqi manbadan ma'lumotlarni olishni simulyatsiya qilish
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
            return "Ma'lumotlar uchun " + key;
        }
    
        public static void main(String[] args) {
            DataCache cache = new DataCache();
    
            System.out.println(cache.getData("key1")); // Manbadan yuklash, cachega yozish
            System.out.println(cache.getData("key1")); // Cachedan o'qish
        }
    }
    
  5. Ma'lumotlar bazasi kesh:

    • So'rovlar va ma'lumotlarni ma'lumotlar bazasi tomonida kesh qilish.
    • SGBD tomonidan amalga oshiriladi.
  6. Tarqatilgan kesh:

    • Bir nechta serverlar yoki tugunlar o'rtasida tarqatilgan.
    • Klaster ilovalarida ma'lumotlarni bo'lishish va kengaytirish uchun ishlatiladi.
    • Misollar: Redis, Memcached, Apache Ignite.
    • Tugunlar o'rtasida ma'lumotlarning mos kelishini hal qilishni talab qiladi.
  7. Veb server/API Gateway kesh:

    • Veb server darajasida (masalan, Nginx, Apache) yoki API Gatewayda kesh.
    • HTTP/API so'rovlarining javoblarini kesh qilish.
  8. Brauzer kesh:

    • Foydalanuvchi brauzerida statik resurslar (HTML, CSS, JS, rasmlar) keshda.
    • HTTP sarlavhalari (Cache-Control, Expires) orqali boshqariladi.

Kesh darajasini tanlash, ma'lumotlar turi, dolzarblik talablari, ma'lumotlar hajmi, kengaytirish imkoniyati va amalga oshirish murakkabligiga bog'liq. Ko'pincha, ilovada bir nechta darajalar kombinatsiyasi ishlatiladi.