C++ में कैशिंग: Redis, डेटा लेयर और अन्य उपकरण

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

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

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

C++ में कैशिंग: एप्लिकेशन को गति देने के लिए Redis और अन्य उपकरण



कैशिंग C++ में एप्लिकेशन के प्रदर्शन को अनुकूलित करने के लिए प्रमुख तंत्रों में से एक है। आधुनिक सिस्टम में, जहां डेटा तक पहुंच की गति महत्वपूर्ण है (वेब सर्वर, गेम, उच्च-लोड बैकएंड), एक अच्छी तरह से कॉन्फ़िगर किया गया कैश प्रतिक्रिया समय को दस गुना तक कम कर सकता है। इस लेख में, हम Redis और वैकल्पिक समाधानों, जिसमें अंतर्निहित डेटा संरचनाएं शामिल हैं, का उपयोग करके C++ में कैशिंग को व्यवस्थित करने का तरीका समझेंगे।



C++ में कैशिंग की आवश्यकता क्यों है?

कैश का मुख्य उद्देश्य बार-बार अनुरोधित डेटा को तेज़ स्टोरेज (आमतौर पर RAM में) में संग्रहीत करना है, ताकि महंगे ऑपरेशनों जैसे डेटाबेस क्वेरी, गणना या नेटवर्क कॉल से बचा जा सके। C++ के लिए यह विशेष रूप से प्रासंगिक है, क्योंकि भाषा का उपयोग रीयल-टाइम सिस्टम और उच्च-लोड सेवाओं में किया जाता है।



Redis — C++ के लिए वितरित कैश

Redis एक in-memory डेटा स्टोर है, जिसका उपयोग अक्सर कैश के रूप में किया जाता है। C++ से Redis के साथ काम करने के लिए कई परिपक्व लाइब्रेरीज़ उपलब्ध हैं:



  • hiredis — एक न्यूनतम C-लाइब्रेरी, Redis का आधिकारिक क्लाइंट। हल्की, लेकिन मैन्युअल मेमोरी प्रबंधन और सख्त टाइपिंग की आवश्यकता होती है।
  • redis-plus-plus — hiredis पर एक आधुनिक C++17 रैपर। कनेक्शन पूल, ट्रांज़ैक्शन, Redis Cluster और एसिंक्रोनस ऑपरेशन का समर्थन करता है।
  • cpp_redis — एक और C++11 लाइब्रेरी जिसका सिंटैक्स hiredis के समान है, लेकिन अधिक सुविधाजनक API के साथ।


redis-plus-plus के कनेक्शन और बुनियादी उपयोग का उदाहरण:



#include <sw/redis++/redis++.h>

using namespace sw::redis;

int main() { // Redis से कनेक्शन (लोकल सर्वर, पोर्ट 6379) auto redis = Redis("tcp://127.0.0.1:6379");

// TTL के साथ कैश में लिखें (जीवनकाल 60 सेकंड) redis.setex("user:123:profile", 60, "{\\"name\\":\\"Alice\\",\\"age\\":30}");

// कैश से पढ़ें auto val = redis.get("user:123:profile"); if (val) { std::cout << "कैश मिला: " << *val << std::endl; } else { std::cout << "कैश खाली है, डेटाबेस से डेटा लोड करना होगा" << std::endl; }

return 0;}


Redis के लाभ: वितरण, जटिल संरचनाओं (सूचियाँ, हैश, सेट) का समर्थन, TTL, pub/sub। नुकसान: एक अलग सर्वर की आवश्यकता, नेटवर्क विलंबता (हालांकि न्यूनतम)।



C++ में अंतर्निहित कैश: LRU-कैश और डेटा लेयर

यदि आपको वितरित सिस्टम की आवश्यकता नहीं है, तो आप सीधे एप्लिकेशन में कैश लागू कर सकते हैं। सबसे लोकप्रिय एल्गोरिदम LRU (Least Recently Used) है। यह उन डेटा को हटा देता है जिनका सबसे लंबे समय से उपयोग नहीं किया गया है।



C++17 में std::unordered_map और std::list का उपयोग करके एक सरल LRU-कैश के कार्यान्वयन का उदाहरण:



#include <unordered_map>#include <list>#include <stdexcept>

template<typename Key, typename Value>class LRUCache {public: LRUCache(size_t capacity) : capacity_(capacity) {}

Value get(const Key& key) { auto it = cache_.find(key); if (it == cache_.end()) { throw std::runtime_error("Key not found"); } // तत्व को सूची की शुरुआत में ले जाएं (सबसे हाल ही में उपयोग किया गया) order_.splice(order_.begin(), order_, it->second.second); return it->second.first; }

void put(const Key& key, const Value& value) { auto it = cache_.find(key); if (it != cache_.end()) { // मान अपडेट करें और शुरुआत में ले जाएं it->second.first = value; order_.splice(order_.begin(), order_, it->second.second); return; } // यदि कैश भरा हुआ है, तो अंतिम तत्व हटाएं (LRU) if (cache_.size() == capacity_) { auto last = order_.back(); order_.p

अनुशंसाएँ