Kotlin में कैशिंग: Redis, Memcached और इन-बिल्ट समाधान - पूरी जानकारी
\n\nआधुनिक Kotlin एप्लिकेशन को तेज़ रिस्पॉन्स टाइम और डेटा की कुशल प्रोसेसिंग की आवश्यकता होती है। इस लक्ष्य को प्राप्त करने के लिए कैशिंग एक महत्वपूर्ण टूल है। इस लेख में हम तीन तरीकों को समझेंगे: Redis, Memcached और JVM स्तर पर इन-बिल्ट समाधान। आप सीखेंगे कि सही रणनीति कैसे चुनें और अपने प्रोजेक्ट में इंटीग्रेट करने के लिए तैयार कोड उदाहरण प्राप्त करें।
\n\n1. Kotlin में इन-बिल्ट कैशिंग (In-Memory Cache)
\n\nसबसे आसान तरीका है एप्लिकेशन के अंदर कैश का उपयोग करना। Kotlin (JVM पर चलने वाला) में आप मानक कलेक्शन या विशेष लाइब्रेरी जैसे Caffeine या Guava Cache का उपयोग कर सकते हैं।
\n\nCaffeine के साथ उदाहरण (अनुशंसित)
\nbuild.gradle.kts में डिपेंडेंसी जोड़ें:
implementation("com.github.ben-manes.caffeine:caffeine:3.1.8")\n\nकैशिंग सर्विस बनाएं:
\nimport com.github.benmanes.caffeine.cache.Cache\nimport com.github.benmanes.caffeine.cache.Caffeine\nimport java.util.concurrent.TimeUnit\n\nclass UserCache {\n private val cache: Cache<String, User> = Caffeine.newBuilder()\n .expireAfterWrite(10, TimeUnit.MINUTES)\n .maximumSize(1000)\n .build()\n\n fun getUser(id: String): User? = cache.getIfPresent(id)\n\n fun putUser(id: String, user: User) {\n cache.put(id, user)\n }\n}\n\nलाभ: न्यूनतम विलंबता, कोई नेटवर्क कॉल नहीं, सेटअप सरल।
\nनुकसान: एप्लिकेशन रीस्टार्ट करने पर कैश खत्म हो जाता है, JVM मेमोरी तक सीमित।
2. Kotlin में Redis के साथ कैशिंग
\n\nRedis एक शक्तिशाली in-memory स्टोर है जो जटिल डेटा संरचनाओं को सपोर्ट करता है। यह डिस्ट्रीब्यूटेड सिस्टम के लिए आदर्श है।
\n\nSpring Data Redis के माध्यम से सेटअप
\nडिपेंडेंसी जोड़ें:
\nimplementation("org.springframework.boot:spring-boot-starter-data-redis")\nimplementation("org.jetbrains.kotlin:kotlin-reflect")\n\nकॉन्फ़िगरेशन (application.yml):
\nspring:\n redis:\n host: localhost\n port: 6379\n timeout: 2000ms\n lettuce:\n pool:\n max-active: 8\n max-idle: 4\n\nSpring Cache एनोटेशन के साथ सर्विस का उदाहरण:
\nimport org.springframework.cache.annotation.Cacheable\nimport org.springframework.stereotype.Service\n\n@Service\nclass ProductService {\n\n @Cacheable("products", key = "#id")\n fun getProduct(id: Long): Product {\n println("डेटाबेस से लोड हो रहा है: $id")\n return Product(id, "उत्पाद $id")\n }\n}\n\nRedis के साथ सीधे काम करने के लिए (Spring के बिना):
\nimport io.lettuce.core.RedisClient\nimport io.lettuce.core.api.sync.RedisCommands\n\nclass RedisCache {\n private val commands: RedisCommands<String, String>\n\n init {\n val client = RedisClient.create("redis://localhost:6379")\n commands = client.connect().sync()\n }\n\n fun set(key: String, value: String, ttlSeconds: Long = 300) {\n commands.setex(key, ttlSeconds, value)\n }\n\n fun get(key: String): String? = commands.get(key)\n}\n\nलाभ: डिस्ट्रीब्यूटेड कैश, डेटा स्थायित्व, TTL और जटिल संरचनाओं का सपोर्ट।
\nनुकसान: अलग सर्वर की आवश्यकता, थोड़ी अधिक विलंबता (नेटवर्क कॉल)।
3. Kotlin में Memcached के साथ कैशिंग
\n\nMemcached एक हल्का डिस्ट्रीब्यूटेड स्टोर है जो छोटे ऑब्जेक्ट्स को मेमोरी में स्टोर करने के लिए ऑप्टिमाइज़ किया गया है।
\n\nxmemcached लाइब्रेरी के माध्यम से कनेक्शन
\nbuild.gradle.kts में जोड़ें:
implementation("com.googlecode.xmemcached:xmemcached:2.4.8")\n\nउपयोग का उदाहरण:
\nimport net.rubyeye.xmemcached.MemcachedClient\nimport net.rubyeye.xmemcached.XMem