C++ में कैशिंग: Redis और अन्य लोकप्रिय उपकरण
उच्च-लोड वाले C++ अनुप्रयोगों में डेटा तक पहुँच की गति महत्वपूर्ण है। कैशिंग सर्वर प्रतिक्रिया समय को 10–100 गुना तक कम कर सकता है, डेटाबेस और बाहरी API पर लोड कम करता है। इस लेख में, हम C++ पर कैश के साथ काम करने के लिए मुख्य लाइब्रेरीज़ पर चर्चा करेंगे: क्लासिक Redis से लेकर एम्बेडेड इंजन LevelDB और RocksDB तक।
1. Redis और C++ के लिए क्लाइंट लाइब्रेरीज़
Redis सबसे लोकप्रिय in-memory key-value स्टोर है, जो जटिल डेटा संरचनाओं (सूचियाँ, सेट, हैश) का समर्थन करता है। C++ के लिए दो मुख्य क्लाइंट हैं:
- hiredis — एक न्यूनतम C-लाइब्रेरी (आधिकारिक), जो रैपर के माध्यम से C++ में आसानी से एकीकृत होती है।
- redis-plus-plus — एक आधुनिक C++17 लाइब्रेरी जिसमें Redis कमांड का पूर्ण कवरेज, कनेक्शन पूल, पाइपलाइन और ट्रांज़ैक्शन का समर्थन है।
hiredis के साथ उदाहरण (सिंक्रोनस)
#include <hiredis/hiredis.h>#include <iostream>
int main() { 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 hello"); freeReplyObject(reply);
reply = (redisReply*)redisCommand(c, "GET key"); if (reply->type == REDIS_REPLY_STRING) { std::cout << "GET key: " << reply->str << std::endl; } freeReplyObject(reply); redisFree(c); return 0;}redis-plus-plus के साथ उदाहरण (एसिंक्रोनस + पूल)
#include <sw/redis++/redis++.h>#include <iostream>
int main() { sw::redis::Redis redis("tcp://127.0.0.1:6379");
// TTL के साथ सेट करें (5 सेकंड) redis.setex("user:42", 5, "John Doe");
// प्राप्त करें auto val = redis.get("user:42"); if (val) { std::cout << "कैश किया गया उपयोगकर्ता: " << *val << std::endl; } else { std::cout << "कुंजी समाप्त हो गई या नहीं मिली" << std::endl; } return 0;}Redis के लाभ: उच्च गति (माइक्रोसेकंड), कमांड का समृद्ध सेट, प्रतिकृति, क्लस्टरिंग। नुकसान: रैम की खपत करता है, एक अलग सर्वर की आवश्यकता होती है।
2. Memcached और libmemcached
Memcached सबसे सरल वितरित कैश है, जो केवल रैम में डेटा संग्रहीत करता है। C++ के लिए libmemcached लाइब्रेरी (या इसका C++ रैपर libmemcachedutil) का उपयोग किया जाता है।
libmemcached के साथ उदाहरण
#include <libmemcached/memcached.h>#include <iostream>#include <cstring>
int main() { memcached_st *memc = memcached_create(nullptr); memcached_server_add(memc, "127.0.0.1", 11211);
const char *key = "session_token"; const char *value = "abc123"; memcached_return_t rc = memcached_set(memc, key, strlen(key), value, strlen(value), 0, 0); // 0 - बिना संपीड़न, 0 - TTL
if (rc == MEMCACHED_SUCCESS) { size_t value_length; uint32_t flags; char *result = memcached_get(memc, key, strlen(key), &value_length, &flags, &rc); if (rc == MEMCACHED_SUCCESS) { std::cout << "प्राप्त करें: " << result << std::endl; free(result); } } memcached_free(memc); return 0;}Memcached कब चुनें: जब जटिल डेटा संरचनाओं के बिना सरल कैशिंग की आवश्यकता हो, और अधिकतम प्रदर्शन महत्वपूर्ण हो। Redis कार्यक्षमता में बेहतर है, Memcached सादगी में।
3. एम्बेडेड इंजन: LevelDB और RocksDB
यदि कैश स्थानीय होना चाहिए (<
पुस्तकालय में भी
TypeScript में इमेज प्रोसेसिंग: Jimp, Sharp, Canvas गाइड
sqlc Go: पूर्ण गाइड, उदाहरण और सेटअप | PythonLib
TypeScript QR कोड जनरेटर: qrcode.js और qrcode-generator
Rust में JSON प्रसंस्करण: serde_json, simd-json, json5 और अन्य लाइब्रेरीज़
जावास्क्रिप्ट (Node.js) के लिए ORM: Sequelize, TypeORM, Prisma की तुलना