Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Redis

PHP के लिए रेडिस में महारत हासिल करना:इन-मेमोरी कैशिंग के लिए एक व्यावहारिक मार्गदर्शिका

PHP के लिए रेडिस में महारत हासिल करना:इन-मेमोरी कैशिंग के लिए एक व्यावहारिक मार्गदर्शिका <पी> रेडिस एक डेटा स्टोर है जो डेटा को मुख्य रूप से मेमोरी में संग्रहीत करता है। यह पारंपरिक डेटाबेस से तेज़ है, और काफी लोकप्रिय हो गया है।

<पी> इस ट्यूटोरियल में, आप मूल बातें सीखेंगे कि रेडिस कैसे काम करता है, इसका उपयोग कब करना है, इसे अपने डिवाइस पर कैसे इंस्टॉल करना है, और इसे PHP वेब एप्लिकेशन में कैशिंग सिस्टम के रूप में कैसे उपयोग करना है।

रेडिस क्या है?

<पी> रेडिस एक डेटा स्टोर है - एक डेटाबेस की तरह, लेकिन वह जो डेटा को मुख्य रूप से मेमोरी में स्टोर करता है। यह इसे पारंपरिक डेटाबेस की तुलना में बहुत तेज़ बनाता है जहां डेटा डिस्क में संग्रहीत होता है। इस गति के कारण, Redis को अक्सर कैशिंग टूल के रूप में उपयोग किया जाता है।

<पी> Redis किसी भी डेटा प्रकार में डेटा संग्रहीत कर सकता है, क्योंकि यह डेटा संग्रहीत करने के लिए कुंजी-मूल्य युग्म प्रणाली का उपयोग करता है। यह उन पारंपरिक डेटाबेस से भी भिन्न है जो दस्तावेज़ों या पंक्तियों का उपयोग करते हैं। <पी> आप रेडिस डेटाबेस को एक बड़े JSON ऑब्जेक्ट के रूप में सोच सकते हैं, जहां डेटाबेस में सब कुछ एक कुंजी-मूल्य जोड़ी है। इसका मतलब है कि यह संरचित डेटा संग्रहीत करने के लिए सबसे अच्छी जगह नहीं हो सकती है।

<पी> आप Redis को डेटाबेस के रूप में भी उपयोग कर सकते हैं, क्योंकि इसमें दृढ़ता के लिए डिस्क पर डेटा लिखने की क्षमता है। आप समय-समय पर या आपके द्वारा जारी किए गए प्रत्येक आदेश के बाद डेटा को जारी रखने के लिए Redis को कॉन्फ़िगर कर सकते हैं। जब Redis को डेटा को बनाए रखने के लिए कॉन्फ़िगर नहीं किया जाता है, तो यह बहुत अस्थिर होता है, और सिस्टम क्रैश के परिणामस्वरूप डेटा की हानि होगी।

<पी> रेडिस उत्पादन स्तर के अनुप्रयोगों में लोकप्रिय है और इसका उपयोग ट्विटर, जीथब, स्नैपचैट और स्टैकओवरफ्लो जैसी बड़ी कंपनियों द्वारा किया जाता है।

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

रेडिस कैसे स्थापित करें

<पी> आप Redis को किसी भी ऑपरेटिंग सिस्टम पर इंस्टॉल कर सकते हैं। यहां macOS, Linux के लिए Windows सबसिस्टम और Linux के लिए निर्देश दिए गए हैं।

macOS

<पी> MacOS पर Redis स्थापित करने के लिए, चलाएँ:

brew install redis
<पी> फिर, Redis प्रारंभ करने के लिए यह कमांड चलाएँ:

redis-server

लिनक्स और लिनक्स के लिए विंडोज सबसिस्टम

<पी> Redis अभी तक विंडोज़ ऑपरेटिंग सिस्टम का बिल्कुल समर्थन नहीं करता है, इसलिए आप Linux वातावरण के लिए विंडोज़ पर WSL (लिनक्स के लिए विंडोज़ सबसिस्टम) स्थापित कर सकते हैं।

<पी> Linux पर Redis स्थापित करने के लिए, चलाएँ:

curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt-get update
sudo apt-get install redis
<पी> फिर, Redis प्रारंभ करने के लिए यह कमांड चलाएँ:

sudo service redis-server start
<पी> अब जब Redis स्थापित हो गया है, तो आप redis-cli ping चलाकर इसका परीक्षण कर सकते हैं . यह "PONG" आउटपुट देगा . इस तरह:

<पी> PHP के लिए रेडिस में महारत हासिल करना:इन-मेमोरी कैशिंग के लिए एक व्यावहारिक मार्गदर्शिका रेडिस इंस्टालेशन का परीक्षण

रेडिस बेसिक्स

<पी> Redis को REPL या स्टैंडअलोन एप्लिकेशन के रूप में उपयोग करने के लिए, redis-cli चलाएँ . यह आरईपीएल वातावरण खोलेगा।

डेटा कैसे सेट करें

<पी> SET का प्रयोग करें Redis में कुंजी मान युग्म सेट करने के लिए कीवर्ड। username सेट करने के लिए मान Zubs की कुंजी , इसे चलाएँ:

SET username Zubs
<पी> PHP के लिए रेडिस में महारत हासिल करना:इन-मेमोरी कैशिंग के लिए एक व्यावहारिक मार्गदर्शिका कुंजी-मूल्य युग्म सेट करना

डेटा कैसे प्राप्त करें

<पी> हाल ही में सहेजे गए username को प्राप्त करने के लिए कुंजी, GET का उपयोग करें कीवर्ड इस प्रकार:

GET username
<पी> PHP के लिए रेडिस में महारत हासिल करना:इन-मेमोरी कैशिंग के लिए एक व्यावहारिक मार्गदर्शिका कुंजी द्वारा मान प्राप्त करना

डेटा कैसे हटाएं

<पी> आप DEL का उपयोग करके पहले से संग्रहीत कुंजी को भी हटा सकते हैं इस तरह कीवर्ड:

DEL username
<पी> PHP के लिए रेडिस में महारत हासिल करना:इन-मेमोरी कैशिंग के लिए एक व्यावहारिक मार्गदर्शिका कुंजी द्वारा मान हटाना

कैसे जांचें कि कोई मान मौजूद है या नहीं

<पी> आप EXISTS का उपयोग करके कुंजी के अस्तित्व की जांच कर सकते हैं कीवर्ड. यह 0 लौटाता है जब कुंजी मौजूद नहीं है, और 1 अगर ऐसा होता है. आप यह जाँच कर परीक्षण कर सकते हैं कि क्या हाल ही में username हटाया गया है कुंजी मौजूद है. इस तरह:

<पी> PHP के लिए रेडिस में महारत हासिल करना:इन-मेमोरी कैशिंग के लिए एक व्यावहारिक मार्गदर्शिका

कुंजियों के लिए रहने का समय कैसे निर्धारित करें

<पी> रेडिस आपको यह निर्दिष्ट करने देता है कि कोई कुंजी बनाते समय कितने समय तक मौजूद रहनी चाहिए। यह रेडिस की सचमुच एक बड़ी विशेषता है। ऐसा करने के लिए, SETEX का उपयोग करें इस तरह कीवर्ड:

SETEX key seconds value
<पी> आप TTL का उपयोग करके किसी विशिष्ट कुंजी के रहने का समय जांच सकते हैं कीवर्ड. यह -1 लौटाता है यदि कुंजी की कोई समाप्ति तिथि निर्धारित नहीं है, तो इसका अर्थ है कि इसे अनिश्चित काल तक संग्रहीत किया जाएगा। यह -2 लौटाता है यदि कुंजी मौजूद नहीं है. और यदि कुंजी मौजूद है तो यह सेकंडों में समय लौटाता है।

<पी> आप EXPIRE का उपयोग करके बिना किसी समाप्ति समय के पहले बनाई गई कुंजी के लिए सेकंड में समाप्ति समय निर्धारित कर सकते हैं कीवर्ड. उदाहरण के लिए, एक वेरिएबल age को स्टोर करने के लिए एक कुंजी बनाएं 26 के मान के साथ .
SET age 26
<पी> फिर, इसके लिए 10 सेकंड का समाप्ति समय निर्धारित करें।

EXPIRE age 20
<पी> जीने के लिए बचे समय को एक-दो बार बार-बार जांचें और देखें कि यह वास्तव में कैसे कम हो जाता है और अंततः फिर से अस्तित्व में नहीं रहता है।

<पी> PHP के लिए रेडिस में महारत हासिल करना:इन-मेमोरी कैशिंग के लिए एक व्यावहारिक मार्गदर्शिका

रेडिस के साथ एक सरल एप्लिकेशन कैसे बनाएं

<पी> आपको यह समझने में मदद करने के लिए कि रेडिस कैसे काम करता है, अब हम एक बुनियादी वेब एप्लिकेशन बनाएंगे जो प्रतिक्रियाओं को तेजी से लोड करने के लिए डेटा को कैश करने के लिए रेडिस का उपयोग करता है। आप एक सरल एप्लिकेशन बना रहे होंगे जो JSONPlacefolder से छवि डेटा प्राप्त करेगा और उन्हें वापस कर देगा।

कंपोजर का उपयोग करके एक नया PHP प्रोजेक्ट बनाएं

<पी> प्रोजेक्ट के लिए एक नया फ़ोल्डर बनाएं, निर्देशिका को नए बनाए गए फ़ोल्डर में बदलें, और एक नया कंपोज़र प्रोजेक्ट बनाने के लिए निम्नलिखित कंपाउंड चलाएँ:

composer init -q
<पी> PHP के लिए रेडिस में महारत हासिल करना:इन-मेमोरी कैशिंग के लिए एक व्यावहारिक मार्गदर्शिका

<पी> इससे एक नया composer.json बनेगा फ़ाइल जो इस तरह दिखनी चाहिए:

{
 "require": {}
}
<पी> इसके बाद, अपनी सार्वजनिक फेसिंग कोड फ़ाइलों को रखने के लिए एक सार्वजनिक फ़ोल्डर बनाएं। फिर एक नया index.php बनाएं फ़ोल्डर में फ़ाइल.

<पी> PHP के लिए रेडिस में महारत हासिल करना:इन-मेमोरी कैशिंग के लिए एक व्यावहारिक मार्गदर्शिका

<पी> अभी के लिए PHP फ़ाइल में कुछ बॉयलरप्लेट सामग्री डालें और एक सर्वर प्रारंभ करें।

<?php
echo "Hello World!";
php -S localhost:8080

एक साधारण राउटर स्थापित करें और अनुरोध संभालें

<पी> प्रोजेक्ट को पूरा करने के लिए, एक साधारण PHP राउटर, Altorouter स्थापित करें , और एक वेब क्लाइंट, Guzzlehttp .

composer require altorouter/altorouter guzzlehttp/guzzle
<पी> index.php को अपडेट करें इस कोड को शामिल करने के लिए:

<?php
// Import composer autoload file
require_once __DIR__ . '/../vendor/autoload.php';
// Import GuzzleHttp Client
use GuzzleHttp\Client;
// Instantiate router and web client
$router = new AltoRouter();
$client = new Client();
// Register Sample route
$router->map('GET', '/', function () {
 // Set response Content-Type
 header('Content-Type: application/json; charset=utf-8');
 // Return basic response
 echo json_encode(['data' => 'Hello World']);
});
/**
 * Route to get all photos
 */
$router->map('GET', '/photos', function () use ($client) {
 // Make request to JSONPlaceholder
 $response = $client->request('GET', 'https://jsonplaceholder.typicode.com/photos');
 header('Content-Type: application/json; charset=utf-8');
 echo json_encode([
 'data' => json_decode($response->getBody()->getContents())
 ]);
});
/**
 * Route to get single photo by id
 */
$router->map('GET', '/photos/[i:id]', function (int $id) use ($client) {
 $response = $client->request('GET', 'https://jsonplaceholder.typicode.com/photos/' . $id);
 header('Content-Type: application/json; charset=utf-8');
 echo json_encode([
 'data' => json_decode($response->getBody()->getContents())
 ]);
});
$match = $router->match();
if( is_array($match) && is_callable( $match['target'] ) ) {
 call_user_func_array( $match['target'], $match['params'] );
} else {
 // no route was matched
 header( $_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found');
}
<पी> कोड काफी स्वतः स्पष्ट है। लेकिन, यहां स्पष्टता के लिए एक विवरण दिया गया है। पंक्ति 1-11 से, आवश्यक कक्षाएं GuzzleHttp और AltoRouter आयात और त्वरित की जाती हैं।

<पी> पंक्ति 14-20 से, पहला मार्ग पंजीकृत है, एक साधारण समापन के साथ जो "हैलो वर्ल्ड!" लौटाता है। पंक्तियाँ 25-45 दो और मार्गों को पंजीकृत करती हैं, एक सभी फ़ोटो लाने के लिए, /photos और दूसरा एकल फोटो लाने के लिए, /photos/id . <पी> रूट घोषणा में सेट क्लोजर को वास्तव में निष्पादित करने के लिए राउटर पैकेज के दस्तावेज़ीकरण के आधार पर अंतिम पंक्तियों की आवश्यकता होती है।

<पी> आप पोस्टमैन का उपयोग करके इन मार्गों का परीक्षण कर सकते हैं।

<पी> PHP के लिए रेडिस में महारत हासिल करना:इन-मेमोरी कैशिंग के लिए एक व्यावहारिक मार्गदर्शिका हैलो वर्ल्ड मार्ग <पी> PHP के लिए रेडिस में महारत हासिल करना:इन-मेमोरी कैशिंग के लिए एक व्यावहारिक मार्गदर्शिका सभी फ़ोटो मार्ग प्राप्त करें <पी> PHP के लिए रेडिस में महारत हासिल करना:इन-मेमोरी कैशिंग के लिए एक व्यावहारिक मार्गदर्शिका एकल फोटो मार्ग प्राप्त करें <पी> /photos मार्ग प्रति अनुरोध औसतन 1400ms लेता है। /photos/id प्रति अनुरोध औसतन 900ms लेता है।

रेडिस इंस्टॉल और इंस्टेंटिएट करें

<पी> मूल अनुरोध के परिणामों को JSONPlacefolder पर कैश करके, फिर हर बार अनुरोध करने के बजाय कैश से प्रतिक्रिया लौटाकर इन समयों को कम किया जा सकता है।

<पी> PHP के साथ Redis का उपयोग करने के लिए, PhpRedis एक्सटेंशन इंस्टॉल करें। यह एक्सटेंशन रेडिस के साथ संचार करने के लिए एक एपीआई प्रदान करता है। आप इसे कमांड का उपयोग करके आसानी से इंस्टॉल कर सकते हैं:

pecl install redis
<पी> इंस्टालेशन के बाद, आप इस क्लास का उपयोग अपने PHP प्रोजेक्ट में कर सकते हैं। कक्षा को आयात करें और इसे अपने index.php के शीर्ष पर इंस्टेंट करें फ़ाइल:

$redis = new Redis();
$redis->connect('127.0.0.1');
<पी> ऐसा करने के बाद, अब आप अपने प्रोजेक्ट में Redis का उपयोग कर सकते हैं।

रेडिस के साथ डेटा को कैसे कैश करें

<पी> 1 घंटे (3600 सेकंड) की समाप्ति समय के साथ JSONPlacefolder से Redis में लौटाए गए कच्चे JSON प्रतिक्रिया को संग्रहीत करें।

$response = $client->request('GET', 'https://jsonplaceholder.typicode.com/photos');
$redis->setex(
 'photos',
 3600,
 $response->getBody()->getContents()
);
<पी> यहां, आप photos नामक एक नई कुंजी बनाएं , इसे 1 घंटे का समाप्ति समय दें, फिर इसे JSONPlacefolder से प्राप्त कच्ची प्रतिक्रिया निर्दिष्ट करें।

<पी> लेकिन इस बिंदु पर एपीआई को प्रतिक्रिया देने में अभी भी काफी समय लगता है। ऐसा इसलिए है क्योंकि आप केवल इस प्रतिक्रिया को संग्रहीत कर रहे हैं, आप प्रतिक्रिया वापस करने के लिए रेडिस का उपयोग नहीं कर रहे हैं। <पी> इसे ठीक करने के लिए, जब कोई नया अनुरोध आता है, तो जांचें कि क्या आपके पास पहले से मेमोरी में कुछ डेटा संग्रहीत है। यदि हाँ, तो आप डेटा को मेमोरी में वापस कर देते हैं, अन्यथा, आप JSONPlacefolder को कॉल करते हैं।

<पी> /photos को अपडेट करें इसे ब्लॉक करें:

/**
 * Route to get all photos
 */
$router->map('GET', '/photos', function () use ($client, $redis) {
 // Check if Redis has the key
 if (!$redis->exists('photos')) {
 $response = $client->request('GET', 'https://jsonplaceholder.typicode.com/photos');
 // Store the data for next use
 $redis->setex(
 'photos',
 REDIS_STANDARD_EXPIRY,
 $response->getBody()->getContents()
 );
 }
 header('Content-Type: application/json; charset=utf-8');
 echo json_encode([
 'data' => json_decode($redis->get('photos'))
 ]);
});
<पी> सुधार देखने के लिए पोस्टमैन में परीक्षण करने पर, आप देखते हैं कि पहली कॉल (कैश होने से पहले मूल कॉल) के बाद औसत प्रतिक्रिया समय /photos के लिए घटकर औसतन 20 एमएस रह गया है। मार्ग. यह 50 गुना से अधिक का सुधार है। रेडिस प्रसंस्करण समय और बिजली की बहुत बचत करता है।

<पी> PHP के लिए रेडिस में महारत हासिल करना:इन-मेमोरी कैशिंग के लिए एक व्यावहारिक मार्गदर्शिका

<पी> /photos/id को अपडेट करें रेडिस का भी उपयोग करने का मार्ग:

$router->map('GET', '/photos/[i:id]', function (int $id) use ($client, $redis) {
 if (!$redis->exists('photos:' . $id)) {
 $response = $client->request('GET', 'https://jsonplaceholder.typicode.com/photos/' . $id);
 $redis->setex(
 'photos:' . $id,
 REDIS_STANDARD_EXPIRY,
 $response->getBody()->getContents()
 );
 }
 header('Content-Type: application/json; charset=utf-8');
 echo json_encode([
 'data' => json_decode($redis->get('photos:' . $id))
 ]);
});
<पी> /photos/id रूट अब और भी तेज़ हो गया है क्योंकि प्रतिक्रिया प्राप्त करने में 5ms से भी कम समय लगता है, 45x से अधिक का सुधार।

<पी> PHP के लिए रेडिस में महारत हासिल करना:इन-मेमोरी कैशिंग के लिए एक व्यावहारिक मार्गदर्शिका

सारांश

<पी> मुझे आशा है कि अब आप समझ गए होंगे कि Redis क्या है, इसकी मूल बातें क्या हैं, और आप इसका उपयोग अपने PHP वेब अनुप्रयोगों की गति बढ़ाने के लिए कैसे कर सकते हैं। आप इस आलेख में उपयोग की गई कोड फ़ाइलें GitHub पर पा सकते हैं।

<पी> यदि आपके पास कोई प्रश्न या प्रासंगिक सलाह है, तो कृपया उन्हें साझा करने के लिए मुझसे संपर्क करें।

<पी> मेरे अधिक लेख पढ़ने या मेरे काम का अनुसरण करने के लिए, आप लिंक्डइन, ट्विटर और जीथब पर मुझसे जुड़ सकते हैं। यह त्वरित है, यह आसान है और यह मुफ़्त है!

<पी> मुफ़्त में कोड करना सीखें. फ्रीकोडकैंप के ओपन सोर्स पाठ्यक्रम ने 40,000 से अधिक लोगों को डेवलपर्स के रूप में नौकरी पाने में मदद की है। आरंभ करें


  1. MediaPlayer क्लास एक Android ऐप में एक बुनियादी ऑडियो प्लेयर लागू करने के लिए MediaPlayer क्लास एक Android ऐप में एक बुनियादी ऑडियो प्लेयर लागू करने के लिए

    यह उदाहरण दर्शाता है कि मैं एंड्रॉइड ऐप में एक बुनियादी ऑडियो प्लेयर को लागू करने के लिए मेडियाप्लेयर क्लास कैसे बना सकता हूं। चरण 1 - एंड्रॉइड स्टूडियो में एक नया प्रोजेक्ट बनाएं, फाइल ⇒ न्यू प्रोजेक्ट पर जाएं और एक नया प्रोजेक्ट बनाने के लिए सभी आवश्यक विवरण भरें। चरण 2 - निम्न कोड को res/layout

  1. C भाषा में विभिन्न खोज तकनीकें क्या हैं? C भाषा में विभिन्न खोज तकनीकें क्या हैं?

    खोज तकनीक का तात्पर्य तत्वों की सूची के बीच एक प्रमुख तत्व को खोजने से है। यदि दिया गया तत्व सूची में मौजूद है, तो खोज प्रक्रिया को सफल कहा जाता है। यदि दिया गया तत्व सूची में मौजूद नहीं है, तो खोज प्रक्रिया को असफल कहा जाता है। C भाषा दो प्रकार की खोज तकनीक प्रदान करती है। वे इस प्रकार हैं

  1. डीबीएमएस में डेटा स्वतंत्रता डीबीएमएस में डेटा स्वतंत्रता

    डेटाबेस में बड़ी मात्रा में डेटा होता है। वह सभी डेटा उपयोगकर्ता डेटा नहीं है, इसमें से कुछ मेटाडेटा आदि हो सकते हैं। इसलिए, यह बहुत महत्वपूर्ण है कि डेटाबेस में डेटा स्वतंत्रता हो। डेटा स्वतंत्रता का मूल रूप से मतलब है कि यदि डेटा को एक स्तर पर बदला जाता है, तो यह उच्च स्तरों पर डेटा दृश्य को प्रभ