Kotlin में कैशिंग: Redis, Memcached और अंतर्निहित समाधान — A से Z तक
\n\nकैशिंग एप्लिकेशन के प्रदर्शन को बढ़ाने के लिए प्रमुख उपकरणों में से एक है। Kotlin इकोसिस्टम में, जो JVM और Android के ऊपर काम करता है, डेवलपर के पास कई समाधान उपलब्ध हैं: वितरित सिस्टम (Redis, Memcached) से लेकर अंतर्निहित स्थानीय कैश (Caffeine, Guava Cache, Ehcache) तक। इस लेख में, हम समझेंगे कि इनमें से प्रत्येक को Kotlin प्रोजेक्ट में कैसे एकीकृत किया जाए, कोड उदाहरण देंगे और चयन के लिए सिफारिशें देंगे।
\n\n1. JVM पर अंतर्निहित कैशिंग: Caffeine और Guava Cache
\n\nKotlin में स्थानीय कैशिंग के लिए Caffeine सबसे उपयुक्त है — यह एक उच्च-प्रदर्शन लाइब्रेरी है जो Java में लिखी गई है और Kotlin के साथ पूरी तरह से संगत है। यह समय, आकार और वजन के आधार पर स्वचालित अनलोडिंग का समर्थन करता है। विकल्प Google का Guava Cache है, लेकिन Caffeine तेज़ है (अक्सर 2-3 गुना)।
\n\nउदाहरण: Caffeine + Kotlin
\n\nbuild.gradle.kts में निर्भरता जोड़ें:
implementation("com.github.ben-manes.caffeine:caffeine:3.1.8")\n\n10 मिनट TTL के साथ 1000 तत्वों का कैश बनाएँ:
\nimport com.github.benmanes.caffeine.cache.Caffeine\nimport java.util.concurrent.TimeUnit\n\nval cache = Caffeine.newBuilder()\n .maximumSize(1000)\n .expireAfterWrite(10, TimeUnit.MINUTES)\n .build<String, String>()\n\n// उपयोग\ncache.put("user:42", "{\\"name\\":\\"Alice\\"}")\nval user = cache.getIfPresent("user:42")\nprintln(user) // {"name":"Alice"}\n\nउदाहरण: Guava Cache + Kotlin
\n\nimplementation("com.google.guava:guava:33.0.0-jre")\n\nimport com.google.common.cache.CacheBuilder\nimport java.util.concurrent.TimeUnit\n\nval guavaCache = CacheBuilder.newBuilder()\n .maximumSize(500)\n .expireAfterWrite(5, TimeUnit.MINUTES)\n .build<String, String>()\n\nguavaCache.put("session:abc", "active")\nprintln(guavaCache.getIfPresent("session:abc")) // active\n\nकब उपयोग करें: एप्लिकेशन के एक इंस्टेंस के अस्थायी डेटा को संग्रहीत करने के लिए (जैसे, जटिल गणनाओं के परिणाम, टोकन, कॉन्फ़िगरेशन)। कई इंस्टेंस वाले माइक्रोसर्विसेज के लिए उपयुक्त नहीं है — डेटा सिंक्रोनाइज़ नहीं होता है।
\n\n2. Redis — माइक्रोसर्विसेज के लिए वितरित कैशिंग
\n\nRedis एक in-memory की-वैल्यू स्टोर है जिसका उपयोग वितरित कैश, मैसेज ब्रोकर और डेटाबेस के रूप में किया जाता है। Kotlin के लिए सबसे अच्छा क्लाइंट Lettuce है (एसिंक्रोनस, रिएक्टिव, thread-safe)।
\n\nस्थापना और कनेक्शन
\n\nimplementation("io.lettuce:lettuce-core:6.3.2.RELEASE")\n\nउदाहरण: कनेक्शन और बुनियादी संचालन
\n\nimport io.lettuce.core.RedisClient\nimport io.lettuce.core.api.sync.RedisCommands\n\nval client = RedisClient.create("redis://localhost:6379")\nval connection = client.connect()\nval commands: RedisCommands<String, String> = connection.sync()\n\n// 60 सेकंड TTL के साथ कुंजी सेट करें\ncommands.setex("user:123", 60, "{\\"name\\":\\"Bob\\"}")\n\n// पढ़ें\nval data = commands.get("user:123")\nprintln(data) // {"name":"Bob"}\n\nconnection.close()\nclient.shutdown()\n\nउदाहरण: रिएक्टिव क्लाइंट (Kotlin Coroutines)
\n\nimport io.lettuce.core.RedisClient\nimport io.lettuce.core.api.reactive.RedisReactiveCommands\nimport kotlinx.coroutines.reactive.awaitFirstOrNull\n\nsuspend fun getFromRedis(key: String): String? {\n val client = RedisClient.create("redis://localhost:6379")\n val connection = client.connect()\n val reactive: RedisReactiveCommands<String, String> = connection.reactive()\n\n val result = reactive.get(key).awaitFirstOrNull()\n connection.close()\n client.shutdown()\n return result\n}\n\nकब उपयोग करें: वितरित सिस्टम, माइक्रोसर्विसेज, साझा सत्र, rate limiting, pu