C++ में कैशिंग: Redis और अन्य उपकरण
\n\nकैशिंग C++ अनुप्रयोगों के प्रदर्शन को अनुकूलित करने की प्रमुख तकनीकों में से एक है। यह डेटा तक पहुँचने के समय को कम करता है, डेटाबेस और बाहरी सेवाओं पर लोड को कम करता है। इस लेख में, हम C++ में कैशिंग लागू करने के लिए मुख्य लाइब्रेरीज़ और उपकरणों की समीक्षा करेंगे: Redis और Memcached पर आधारित औद्योगिक समाधानों से लेकर हल्के इन-बिल्ट कार्यान्वयन तक।
\n\n1. Redis और इसके C++ क्लाइंट
\n\nRedis एक उच्च-प्रदर्शन वाला in-memory की-वैल्यू डेटा स्टोर है, जिसे अक्सर कैश के रूप में उपयोग किया जाता है। C++ से Redis के साथ काम करने के लिए दो मुख्य लाइब्रेरीज़ हैं:
\n\n1.1. hiredis
\nhiredis एक न्यूनतम C-लाइब्रेरी है, जिसे आधिकारिक रूप से Redis द्वारा समर्थित किया जाता है। यह सिंक्रोनस और एसिंक्रोनस API प्रदान करती है।
\nस्थापना:
\n# Ubuntu/Debian\nsudo apt install libhiredis-dev\n\n# macOS\nbrew install hiredis\n\n# स्रोत से निर्माण\ngit clone https://github.com/redis/hiredis.git\ncd hiredis && make && sudo make install\n\nउपयोग उदाहरण (सिंक्रोनस मोड):
\n#include <hiredis/hiredis.h>\n#include <iostream>\n\nint main() {\n redisContext *c = redisConnect("127.0.0.1", 6379);\n if (c == nullptr || c->err) {\n std::cerr << "कनेक्शन त्रुटि: " << c->errstr << std::endl;\n return 1;\n }\n\n // मान सेट करना\n redisReply *reply = (redisReply*)redisCommand(c, "SET key1 value1");\n freeReplyObject(reply);\n\n // मान प्राप्त करना\n reply = (redisReply*)redisCommand(c, "GET key1");\n if (reply->type == REDIS_REPLY_STRING) {\n std::cout << "मान: " << reply->str << std::endl;\n }\n freeReplyObject(reply);\n\n redisFree(c);\n return 0;\n}\n\n1.2. redis-plus-plus
\nredis-plus-plus hiredis पर एक आधुनिक C++17 रैपर है जिसमें सुविधाजनक इंटरफ़ेस, कनेक्शन पूल, ट्रांज़ैक्शन और pub/sub के लिए समर्थन है।
\nस्थापना:
\ngit clone https://github.com/sewenew/redis-plus-plus.git\ncd redis-plus-plus\nmkdir build && cd build\ncmake -DREDIS_PLUS_PLUS_CXX_STANDARD=17 ..\nmake && sudo make install\n\nउदाहरण:
\n#include <sw/redis++/redis++.h>\n#include <iostream>\n\nint main() {\n sw::redis::Redis redis("tcp://127.0.0.1:6379");\n\n // TTL के साथ सेट करना (जीवनकाल 60 सेकंड)\n redis.setex("session:user1", 60, "active");\n\n // प्राप्त करना\n auto val = redis.get("session:user1");\n if (val) {\n std::cout << "सत्र: " << *val << std::endl;\n }\n\n // अस्तित्व की जाँच\n bool exists = redis.exists("session:user1");\n std::cout << "मौजूद है: " << std::boolalpha << exists << std::endl;\n\n return 0;\n}\n\n2. Memcached और libmemcached
\n\nMemcached एक और लोकप्रिय in-memory स्टोर है, जो छोटी वस्तुओं को कैश करने के लिए अनुकूलित है। मुख्य C++ लाइब्रेरी libmemcached है।
\nस्थापना:
\nsudo apt install libmemcached-dev\n\n# स्रोत से निर्माण\ngit clone https://github.com/awesomized/libmemcached.git\ncd libmemcached && ./configure && make && sudo make install\n\nउदाहरण:
\n#include <libmemcached/memcached.h>\n#include <iostream>\n#include <cstring>\n\nint main() {\n memcached_st *memc = memcached_create(nullptr);\n memcached_server_st *servers = memcached_server_list_append(nullptr, "127.0.0.1", 11211, nullptr);\n memcached_server_push(memc, servers);\n memcached_server_list_free(servers);\n\n // लेखन\n const char *key = "cache_key";\n const char *value = "cached_value";\n memcached_return_t rc = memcached_set(memc, k