Rust में कैशिंग: Redis, Memcached और अंतर्निहित समाधान
कैशिंग वेब अनुप्रयोगों और उच्च-लोड सिस्टम के प्रदर्शन को अनुकूलित करने के लिए प्रमुख तंत्रों में से एक है। Rust पारिस्थितिकी तंत्र में कैशिंग आयोजित करने के लिए कई शक्तिशाली लाइब्रेरी उपलब्ध हैं: वितरित समाधानों (Redis, Memcached) से लेकर हल्के in-memory कैश (moka, cached) तक। इस लेख में, हम उनमें से प्रत्येक का विस्तार से विश्लेषण करेंगे, कोड उदाहरण प्रदान करेंगे और उनके प्रदर्शन की तुलना करेंगे।
1. क्रेट redis-rs के माध्यम से Redis
redis-rs Rust पर Redis के लिए प्राथमिक और सबसे परिपक्व क्लाइंट है। यह सभी बुनियादी सुविधाओं का समर्थन करता है: स्ट्रिंग्स, सूचियाँ, हैश, pub/sub, लेन-देन और क्लस्टरिंग।
स्थापना
[dependencies]redis = { version = "0.25", features = ["tokio-comp"] }tokio = { version = "1", features = ["full"] }उदाहरण: Redis के साथ बुनियादी कैशिंग
use redis::{AsyncCommands, Client};use std::time::Duration;
#[tokio::main]async fn main() -> redis::RedisResult<()> { let client = Client::open("redis://127.0.0.1:6379/")?; let mut con = client.get_multiplexed_async_connection().await?;
// 60 सेकंड TTL के साथ कुंजी सेट करें con.set_ex("user:1:profile", "{\\"name\\":\\"Alice\\"}", 60).await?;
// मान पढ़ें let data: Option<String> = con.get("user:1:profile").await?; println!("प्राप्त: {:?}", data);
// काउंटर बढ़ाएँ let count: i64 = con.incr("page_views", 1).await?; println!("पृष्ठ दृश्य: {}", count);
Ok(())}महत्वपूर्ण विशेषताएँ:
- अतुल्यकालिकता: redis-rs सिंक्रोनस और एसिंक्रोनस (tokio/async-std) दोनों मोड का समर्थन करता है।
- Pipeline: विलंबता कम करने के लिए कमांड का समूहीकरण।
- क्लस्टरिंग:
redis::clusterके माध्यम से Redis Cluster का समर्थन।
2. क्रेट memcached-rs के माध्यम से Memcached
Memcached एक हल्का वितरित की-वैल्यू स्टोर है। Rust के लिए क्रेट memcached-rs (या memcache) मौजूद है।
उपयोग का उदाहरण
use memcache::Client;
fn main() -> memcache::MemcacheResult<()> { let client = Client::connect("memcache://127.0.0.1:11211")?;
// TTL के साथ लिखना client.set("session:token_abc", "user_data", 30)?;
// पढ़ना let value: Option<String> = client.get("session:token_abc")?; println!("Memcached से: {:?}", value);
// हटाना client.delete("session:token_abc")?;
Ok(())}Redis के बजाय Memcached कब चुनें:
- यदि केवल सरल कैशिंग (की-वैल्यू) की आवश्यकता है।
- यदि न्यूनतम विलंबता महत्वपूर्ण है (सरल संचालन के लिए Memcached Redis से तेज़ है)।
- यदि Redis डेटा संरचनाओं (सूचियाँ, हैश, सेट) की आवश्यकता नहीं है।
3. अंतर्निहित in-memory कैश: moka और cached
एक ही प्रक्रिया के अंदर कैशिंग के लिए (बाहरी सर्वर के बिना), क्रेट moka और cached उत्कृष्ट रूप से उपयुक्त हैं।
3.1 Moka — उच्च-प्रदर्शन कैश
moka एक एसिंक्रोनस, थ्रेड-सेफ कैश है जो TTL, अधिकतम आकार और निष्कासन नीति (LRU, LFU) का समर्थन करता है।
use moka::future::Cache;use std::time::Duration;
#[tokio::main]async fn main() { let cache: Cache<String, String> = Cache::builder() .max_capacity(10_000) // अधिकतम 10,000 प्रविष्टियाँ .time_to_live(Duration::from_secs(300)) // 5 मिनट का TTL .build();
// सम्मिलन cache.insert("key1".to_string(), "value1".to_string()).await;
// प्राप्त करना if let Some(value) = cache.get(&"key1".to_string()).await { p