C++ में कैशिंग: Redis, Memcached और अंतर्निहित समाधान
कैशिंग C++ अनुप्रयोगों के प्रदर्शन को अनुकूलित करने के लिए प्रमुख उपकरणों में से एक है। यह डेटा तक पहुँचने के समय को कम करने, डेटाबेस पर लोड कम करने और अनुरोध प्रसंस्करण को गति देने में मदद करता है। इस लेख में, हम C++ में कैशिंग के तीन मुख्य दृष्टिकोणों पर विचार करेंगे: बाहरी सिस्टम Redis और Memcached का उपयोग, साथ ही मानक कंटेनरों और लाइब्रेरीज़ की मदद से अंतर्निहित समाधान बनाना। आप जानेंगे कि कब कौन सा दृष्टिकोण चुनना है, और व्यावहारिक कोड उदाहरण देखेंगे।
C++ में कैशिंग की आवश्यकता क्यों है?
C++ अनुप्रयोग अक्सर बड़ी मात्रा में डेटा के साथ काम करते हैं: वेब सर्वर से लेकर गेम इंजन और रियल-टाइम सिस्टम तक। कैशिंग के बिना, प्रत्येक अनुरोध महंगी I/O संचालन या जटिल गणनाओं का कारण बन सकता है। कैश बार-बार अनुरोधित डेटा को तेज़ मेमोरी में संग्रहीत करता है, जो प्रदान करता है:
- विलंबता में कमी — RAM तक पहुँच डिस्क या नेटवर्क की तुलना में 100-1000 गुना तेज़ है।
- लोड में कमी — डेटाबेस और बाहरी सेवाओं को कम अनुरोध प्राप्त होते हैं।
- थ्रूपुट में वृद्धि — एप्लिकेशन प्रति सेकंड अधिक अनुरोधों को संसाधित करता है।
बाहरी कैशिंग सिस्टम: Redis
Redis क्या है?
Redis एक in-memory की-वैल्यू डेटा स्टोर है जो जटिल संरचनाओं (सूचियाँ, सेट, हैश) का समर्थन करता है। यह एक अलग सर्वर के रूप में काम करता है, जिसके साथ C++ एप्लिकेशन नेटवर्क के माध्यम से इंटरैक्ट करता है। Redis वितरित सिस्टम के लिए आदर्श है जहाँ कैश कई प्रक्रियाओं या मशीनों के लिए साझा होना चाहिए।
C++ से Redis से कनेक्ट करना
C++ में Redis के साथ काम करने के लिए, hiredis लाइब्रेरी का उपयोग करें — C पर एक न्यूनतम क्लाइंट। कनेक्ट करने और एक सरल अनुरोध निष्पादित करने का उदाहरण:
#include <hiredis/hiredis.h>#include <iostream>#include <string>
int main() { // localhost:6379 पर Redis से कनेक्ट करें redisContext *c = redisConnect("127.0.0.1", 6379); if (c == nullptr || c->err) { std::cerr << "कनेक्शन त्रुटि: " << c->errstr << std::endl; return 1; }
// की सेट करें redisReply *reply = (redisReply*)redisCommand(c, "SET key %s", "value_cpp"); freeReplyObject(reply);
// वैल्यू प्राप्त करें reply = (redisReply*)redisCommand(c, "GET key"); if (reply->type == REDIS_REPLY_STRING) { std::cout << "वैल्यू: " << reply->str << std::endl; } freeReplyObject(reply);
redisFree(c); return 0;}Redis के लाभ और हानियाँ
- + उच्च गति (माइक्रोसेकंड), TTL समर्थन, प्रतिकृति, स्थायित्व।
- + डेटा संरचनाओं का समृद्ध सेट (स्ट्रिंग्स, सूचियाँ, हैश, बिटमैप्स)।
- - एक अलग सर्वर और नेटवर्क इंटरैक्शन की आवश्यकता है।
- - बाहरी बुनियादी ढाँचे पर निर्भरता।
बाहरी कैशिंग सिस्टम: Memcached
Memcached क्या है?
Memcached एक उच्च-प्रदर्शन वितरित मेमोरी कैशिंग सिस्टम है। Redis के विपरीत, यह केवल सरल की-वैल्यू जोड़ियों का समर्थन करता है और इसमें अंतर्निहित स्थायित्व नहीं है। Memcached SQL क्वेरी परिणामों, HTML टुकड़ों और सत्रों को कैश करने के लिए आदर्श है।
C++ से Memcached से कनेक्ट करना
C++ के लिए, libmemcached का उपयोग करें — C API के साथ एक लोकप्रिय लाइब्रेरी। उदाहरण:
#include <libmemcached/memcached.h>#include <iostream>#include <cstring>
int main() { memcached_st *memc = memcached_create(nullptr); memcached_server_st *servers = memcached_server_list_append(nullptr, "127.0.0.1", 11211, nullptr); memcached_server_push(memc, servers);
// की सेट करें memcached_return_t rc; rc = memcached_set(memc, "key", 3, "value_cpp", 9, (time_t)0, (uint32_t)0); // वैल्यू प्राप्त करें size_t value_length; uint32_t flags; char *value = memcached_get(memc, "key", 3, &value_length, &flags, &rc); if (rc == MEMCACHED_SUCCESS) { std::cout << "वैल्यू: " << value << std::endl; free(value); }
memcached_free(memc); return 0;}
```