जावा कैशिंग: Redis, Memcached और इन-बिल्ट सॉल्यूशंस की पूरी गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: जावा में कैशिंग की आवश्यकता क्यों?

\n

आधुनिक हाई-लोड डेवलपमेंट में डेटा तक पहुँच की गति एक महत्वपूर्ण कारक है। डेटाबेस या बाहरी API पर हर अनुरोध प्रतिक्रिया समय और इंफ्रास्ट्रक्चर पर लोड बढ़ाता है। जावा में कैशिंग आपको बार-बार अनुरोधित डेटा को तेज़ मेमोरी (RAM) में स्टोर करने की अनुमति देता है, जिससे प्रतिक्रिया समय दसियों मिलीसेकंड से घटकर माइक्रोसेकंड हो जाता है।

\n

इस लेख में हम कैशिंग के तीन मुख्य दृष्टिकोणों पर चर्चा करेंगे: इन-बिल्ट सॉल्यूशंस (HashMap, Caffeine, Ehcache), Redis और Memcached। आप जानेंगे कि सही टूल कैसे चुनें और काम करने वाले कोड उदाहरण देखेंगे।

\n\n

1. जावा में कैशिंग के लिए इन-बिल्ट सॉल्यूशंस

\n

छोटे प्रोजेक्ट्स या सिंगल-थ्रेडेड एप्लिकेशन के लिए अक्सर इन-बिल्ट कलेक्शंस पर्याप्त होते हैं। हालांकि, प्रोडक्शन वातावरण के लिए विशेष लाइब्रेरीज़ का उपयोग करना बेहतर है।

\n\n

1.1. HashMap पर सरल कैश

\n

सबसे आसान तरीका है मैन्युअल टाइम-टू-लाइव (TTL) प्रबंधन के साथ ConcurrentHashMap का उपयोग करना। यह प्रोटोटाइप के लिए उपयुक्त है, लेकिन इसमें एविक्शन (eviction) तंत्र नहीं है।

\n
import java.util.concurrent.ConcurrentHashMap;\nimport java.util.concurrent.TimeUnit;\n\npublic class SimpleCache {\n    private final ConcurrentHashMap<String, CacheEntry> cache = new ConcurrentHashMap<>();\n\n    public void put(String key, Object value, long ttlMs) {\n        cache.put(key, new CacheEntry(value, System.currentTimeMillis() + ttlMs));\n    }\n\n    public Object get(String key) {\n        CacheEntry entry = cache.get(key);\n        if (entry == null || System.currentTimeMillis() > entry.expiry) {\n            cache.remove(key);\n            return null;\n        }\n        return entry.value;\n    }\n\n    private record CacheEntry(Object value, long expiry) {}\n}
\n\n

1.2. Caffeine — जावा के लिए हाई-परफॉरमेंस कैश

\n

Caffeine एक आधुनिक लाइब्रेरी है जो Spring Cache में उपयोग होती है। यह समय, आकार और उपयोग आवृत्ति के आधार पर स्वचालित एविक्शन का समर्थन करती है।

\n
import com.github.benmanes.caffeine.cache.Cache;\nimport com.github.benmanes.caffeine.cache.Caffeine;\nimport java.util.concurrent.TimeUnit;\n\npublic class CaffeineExample {\n    public static void main(String[] args) {\n        Cache<String, String> cache = Caffeine.newBuilder()\n                .expireAfterWrite(10, TimeUnit.MINUTES)\n                .maximumSize(1000)\n                .build();\n\n        cache.put("user_1", "अलेक्से");\n        String user = cache.getIfPresent("user_1");\n        System.out.println(user); // अलेक्से\n    }\n}
\n\n

1.3. Ehcache — एंटरप्राइज़ स्टैंडर्ड

\n

Ehcache एक परिपक्व समाधान है जो क्लस्टरिंग और डिस्क पर पर्सिस्टेंसी का समर्थन करता है। इसका उपयोग अक्सर Hibernate के साथ किया जाता है।

\n
import org.ehcache.Cache;\nimport org.ehcache.CacheManager;\nimport org.ehcache.config.builders.CacheConfigurationBuilder;\nimport org.ehcache.config.builders.CacheManagerBuilder;\nimport org.ehcache.config.builders.ResourcePoolsBuilder;\n\npublic class EhcacheExample {\n    public static void main(String[] args) {\n        CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder()\n                .withCache("users",\n                        CacheConfigurationBuilder.newCacheConfigurationBuilder(\n                                String.class, String.class,\n                                ResourcePoolsBuilder.heap(100))\n                ).build();\n        cacheManager.init();\n\n        Cache<String, String> cache = cacheManager.getCache("users", String.class, String.class);\n        cache.put("user_2", "मारिया");\n        System.out.println(cache.get("user_2")); // मारिया\n\n        cacheManager.close();\n    }\n}
\n\n

2. Redis — जावा के लिए डिस्ट्रीब्यूटेड कैशिंग

\n

Redis एक इन-मेमोरी डेटा स्टोर है जो एक अलग सर्वर के रूप में काम करता है। यह डिस्ट्रीब्यूटेड सिस्टम के लिए आदर्श है और डेटा को कई नोड्स पर सिंक्रोनाइज़ कर सकता है।

ब्लॉग

पुस्तक अनुशंसाएँ