Kotlin में कैशिंग: Redis, Memcached और अंतर्निहित समाधान A से Z तक

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

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

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

Kotlin में कैशिंग: Redis, Memcached और अंतर्निहित समाधान — A से Z तक

\n\n

कैशिंग एप्लिकेशन के प्रदर्शन को बढ़ाने के लिए प्रमुख उपकरणों में से एक है। Kotlin इकोसिस्टम में, जो JVM और Android के ऊपर काम करता है, डेवलपर के पास कई समाधान उपलब्ध हैं: वितरित सिस्टम (Redis, Memcached) से लेकर अंतर्निहित स्थानीय कैश (Caffeine, Guava Cache, Ehcache) तक। इस लेख में, हम समझेंगे कि इनमें से प्रत्येक को Kotlin प्रोजेक्ट में कैसे एकीकृत किया जाए, कोड उदाहरण देंगे और चयन के लिए सिफारिशें देंगे।

\n\n

1. JVM पर अंतर्निहित कैशिंग: Caffeine और Guava Cache

\n\n

Kotlin में स्थानीय कैशिंग के लिए Caffeine सबसे उपयुक्त है — यह एक उच्च-प्रदर्शन लाइब्रेरी है जो Java में लिखी गई है और Kotlin के साथ पूरी तरह से संगत है। यह समय, आकार और वजन के आधार पर स्वचालित अनलोडिंग का समर्थन करता है। विकल्प Google का Guava Cache है, लेकिन Caffeine तेज़ है (अक्सर 2-3 गुना)।

\n\n

उदाहरण: Caffeine + Kotlin

\n\n

build.gradle.kts में निर्भरता जोड़ें:

\n
implementation("com.github.ben-manes.caffeine:caffeine:3.1.8")
\n\n

10 मिनट TTL के साथ 1000 तत्वों का कैश बनाएँ:

\n
import 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\n
implementation("com.google.guava:guava:33.0.0-jre")
\n\n
import 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\n

2. Redis — माइक्रोसर्विसेज के लिए वितरित कैशिंग

\n\n

Redis एक in-memory की-वैल्यू स्टोर है जिसका उपयोग वितरित कैश, मैसेज ब्रोकर और डेटाबेस के रूप में किया जाता है। Kotlin के लिए सबसे अच्छा क्लाइंट Lettuce है (एसिंक्रोनस, रिएक्टिव, thread-safe)।

\n\n

स्थापना और कनेक्शन

\n\n
implementation("io.lettuce:lettuce-core:6.3.2.RELEASE")
\n\n

उदाहरण: कनेक्शन और बुनियादी संचालन

\n\n
import 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\n
import 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

ब्लॉग

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