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:
-
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.
-
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.
-
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.
-
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 } } -
Ma'lumotlar bazasi kesh:
- So'rovlar va ma'lumotlarni ma'lumotlar bazasi tomonida kesh qilish.
- SGBD tomonidan amalga oshiriladi.
-
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.
-
Veb server/API Gateway kesh:
- Veb server darajasida (masalan, Nginx, Apache) yoki API Gatewayda kesh.
- HTTP/API so'rovlarining javoblarini kesh qilish.
-
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.