Rust में कैशिंग का परिचय
\nकैशिंग Rust में अनुप्रयोगों के प्रदर्शन को बढ़ाने के लिए प्रमुख उपकरणों में से एक है। चाहे आप एक उच्च-लोड वेब सर्वर, डेटाबेस या डेस्कटॉप एप्लिकेशन बना रहे हों, उचित कैशिंग प्रतिक्रिया समय को कम करने, बाहरी संसाधनों पर लोड को कम करने और मेमोरी उपयोग को अनुकूलित करने में मदद करता है। इस लेख में, हम Rust इकोसिस्टम में कैशिंग के तीन मुख्य दृष्टिकोणों पर चर्चा करेंगे: बाहरी सिस्टम (Redis और Memcached) का उपयोग और lru-rs और moka जैसे अंतर्निहित समाधान। आप जानेंगे कि कब कौन सा उपकरण चुनना है, और तैयार कोड उदाहरण प्राप्त करेंगे।
बाहरी कैशिंग सिस्टम: Redis और Memcached
\n\nRust में Redis के साथ कैशिंग
\nRedis एक लोकप्रिय in-memory डेटा स्टोर है जो विभिन्न डेटा संरचनाओं (स्ट्रिंग्स, लिस्ट्स, सेट्स, हैश टेबल्स) का समर्थन करता है। Rust में Redis के साथ काम करने के लिए redis (या redis-rs) क्रेट का उपयोग किया जाता है।
Cargo.toml में निर्भरता जोड़ें:
[dependencies]\nredis = { version = "0.25", features = ["tokio-comp"] }\ntokio = { version = "1", features = ["full"] }\nserde = { version = "1", features = ["derive"] }\nserde_json = "1"\n\nRedis के साथ कनेक्शन और बुनियादी कैशिंग का उदाहरण:
\nuse redis::AsyncCommands;\nuse serde::{Serialize, Deserialize};\n\n#[derive(Debug, Serialize, Deserialize)]\nstruct User {\n id: u32,\n name: String,\n email: String,\n}\n\n#[tokio::main]\nasync fn main() -> redis::RedisResult<()> {\n let client = redis::Client::open("redis://127.0.0.1:6379/")?;\n let mut conn = client.get_multiplexed_async_connection().await?;\n\n // ऑब्जेक्ट को कैश में सहेजें (JSON में सीरियलाइज़ करें)\n let user = User {\n id: 1,\n name: "एलेक्सी".into(),\n email: "alex@example.com".into(),\n };\n let json = serde_json::to_string(&user).unwrap();\n conn.set_ex("user:1", json, 3600).await?; // TTL = 1 घंटा\n\n // कैश से पढ़ें\n let cached: String = conn.get("user:1").await?;\n let user_cached: User = serde_json::from_str(&cached).unwrap();\n println!("उपयोगकर्ता प्राप्त हुआ: {:?}", user_cached);\n\n Ok(())\n}\nRedis के लाभ: जटिल डेटा संरचनाओं का समर्थन, TTL, pub/sub, प्रतिकृति, क्लस्टरिंग। नुकसान: एक अलग सर्वर की आवश्यकता, नेटवर्क विलंबता।
\n\nRust में Memcached के साथ कैशिंग
\nMemcached एक हल्का और सरल in-memory स्टोर है जो "कुंजी-मान" जोड़े को संग्रहीत करने पर केंद्रित है। Rust के लिए memcache क्रेट का उपयोग किया जाता है।
Cargo.toml में जोड़ें:
[dependencies]\nmemcache = "0.19"\ntokio = { version = "1", features = ["full"] }\n\nMemcached के साथ काम करने का उदाहरण:
\nuse memcache::Client;\n\n#[tokio::main]\nasync fn main() -> memcache::MemcacheResult<()> {\n let client = Client::connect("memcache://127.0.0.1:11211")?;\n\n // TTL के साथ लिखें (सेकंड में)\n client.set("greeting", "नमस्ते, दुनिया!", 300)?;\n\n // पढ़ें\n let value: Option<String> = client.get("greeting")?;\n if let Some(msg) = value {\n println!("कैश से: {}", msg);\n }\n\n // काउंटर बढ़ाएँ\n client.set("counter", "10", 0)?;\n client.increment("counter", 5)?;\n let counter: Option<u64> = client.get("counter")?;\n println!("काउंटर: {:?}", counter);\n\n Ok(())\n}\nMemcached के लाभ: सरलता, उच्च गति, न्यूनतम मेमोरी खपत। नुकसान: कोई जटिल डेटा संरचना नहीं, केवल स्ट्रिंग/बाइट्स का भंडारण।
\n\nRust में कैशिंग के लिए अंतर्निहित समाधान
\n\nlru-rs लाइब्रेरी (LRU-कैश)
\nlru क्रेट क्लासिकल Least Recently Used (LRU) निष्कासन एल्गोरिदम को लागू करता है। मेमोरी में कैशिंग के लिए आदर्श।