कैफीन (Caffeine) क्या है?
Caffeine जावा भाषा में एक उच्च-प्रदर्शन कैशिंग लाइब्रेरी है, जिसे गति और दक्षता की आधुनिक आवश्यकताओं को ध्यान में रखकर विकसित किया गया है। यह in-memory कैश प्रदान करता है जिसमें एसिंक्रोनस ऑपरेशन, समय या आकार के अनुसार रिकॉर्ड की स्वचालित निकासी, और अनुकूलन योग्य निष्कासन नीतियां (जैसे, उपयोग आवृत्ति के आधार पर) शामिल हैं। यह लाइब्रेरी Java 8 और उससे ऊपर के संस्करणों के साथ पूरी तरह से संगत है, और Spring Framework (Spring Cache के माध्यम से) जैसी बड़ी परियोजनाओं में सक्रिय रूप से उपयोग की जाती है।
इसकी आवश्यकता क्यों है?
कैशिंग डेटा तक पहुंच के समय को कम करने, डेटाबेस या बाहरी API पर लोड कम करने और एप्लिकेशन की प्रतिक्रियाशीलता बढ़ाने में मदद करता है। Caffeine न्यूनतम ओवरहेड के साथ इन समस्याओं का समाधान करता है: यह पढ़ने और लिखने के लिए सब-माइक्रोसेकंड विलंबता प्रदान करता है, स्वचालित रूप से मेमोरी प्रबंधित करता है, और विशिष्ट व्यावसायिक आवश्यकताओं के अनुसार कैश को लचीले ढंग से कॉन्फ़िगर करने की अनुमति देता है। इसके बिना, आपको HashMap और टाइमर का उपयोग करके मैन्युअल रूप से कैश लागू करना होता, जो जटिल और अविश्वसनीय है।
स्थापना (Installation)
अपनी pom.xml फ़ाइल (Maven) में निर्भरता जोड़ें:
<dependency> <groupId>com.github.ben-manes.caffeine</groupId> <artifactId>caffeine</artifactId> <version>3.1.8</version></dependency>Gradle के लिए:
implementation 'com.github.ben-manes.caffeine:caffeine:3.1.8'मुख्य विशेषताएं
- स्वचालित निकासी (Automatic Eviction): जीवनकाल (expireAfterWrite, expireAfterAccess) या आकार (maximumSize, maximumWeight) के आधार पर रिकॉर्ड हटाना।
- एसिंक्रोनस लोडिंग (Asynchronous Loading): AsyncCache या CompletableFuture के समर्थन के साथ loadingCache विधियों के माध्यम से।
- सांख्यिकी (Statistics): निगरानी के लिए मेट्रिक्स (hit rate, miss rate, evictions) का संग्रह।
- निष्कासन नीतियां (Eviction Policies): डिफ़ॉल्ट रूप से Window TinyLFU (एक अनुकूली एल्गोरिदम, जो इष्टतम के करीब है) का उपयोग करता है।
- Null-सुरक्षा (Null-safety): null मानों की सही हैंडलिंग।
Java में कोड उदाहरण
import com.github.benmanes.caffeine.cache.Cache;import com.github.benmanes.caffeine.cache.Caffeine;
import java.util.concurrent.TimeUnit;
public class CaffeineExample { public static void main(String[] args) { Cache<String, String> cache = Caffeine.newBuilder() .expireAfterWrite(10, TimeUnit.MINUTES) .maximumSize(100) .recordStats() .build();
// कैश में लिखना cache.put("user:123", "Alice");
// स्वचालित लोडिंग के साथ पढ़ना String user = cache.get("user:456", key -> fetchFromDatabase(key)); System.out.println(user); // null या fetch का परिणाम
// सांख्यिकी System.out.println(cache.stats().hitRate()); }
private static String fetchFromDatabase(String key) { return "Bob"; // DB क्वेरी का अनुकरण }}कब उपयोग करें
Caffeine API कॉल के परिणामों, डेटाबेस से डेटा, गणनाओं या किसी भी ऑपरेशन को कैश करने के लिए आदर्श है जो बार-बार और उच्च लागत पर किया जाता है। इसका उपयोग वेब एप्लिकेशन, माइक्रोसर्विसेज, ETL प्रक्रियाओं या किसी भी Java प्रोजेक्ट में करें जहां तेज़ और विश्वसनीय कैश की आवश्यकता हो। यदि आपको वितरित कैशिंग (distributed caching) की आवश्यकता है तो Caffeine से बचें (उस स्थिति में Redis या Hazelcast का उपयोग करें)।
```