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

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

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

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

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

अनुशंसाएँ