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

सेवल्ला पर रेडिस कैशिंग के साथ नेक्स्ट.जेएस एपीआई प्रदर्शन को बढ़ावा दें

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

<पी> पहले के एक लेख में, मैंने नेक्स्ट.जेएस एपीआई बनाने और उसे सेवल्ला के साथ तैनात करने के बारे में बताया था। उदाहरण ने PostgreSQL डेटाबेस में डेटा संग्रहीत किया और सीधे अनुरोधों को संभाला। यह ठीक काम करता है, लेकिन जैसे-जैसे ट्रैफ़िक बढ़ता है, हर अनुरोध पर डेटाबेस तक पहुंचने वाले एपीआई धीमे हो सकते हैं।

<पी> यहीं पर कैशिंग आती है। Redis को कैश परत के रूप में जोड़कर, हम अपने Next.js API को बहुत तेज़ और अधिक कुशल बना सकते हैं। इस लेख में, हम देखेंगे कि रेडिस कैशिंग को हमारे एपीआई में कैसे जोड़ा जाए, इसे सेवल्ला के साथ कैसे तैनात किया जाए और मापने योग्य सुधार दिखाए जाएं।

<पी> पिछले लेख में, मैंने एपीआई के बारे में विस्तार से बताया था। तो आप इस प्रोजेक्ट के लिए आधार के रूप में शुरुआत के लिए इस रिपॉजिटरी का उपयोग कर सकते हैं।

सामग्री तालिका

  • <पी> कैशिंग क्यों मायने रखती है

  • <पी> रेडिस क्या है?

  • <पी> परियोजना की स्थापना

  • <पी> रेडिस का प्रावधान

  • <पी> रीड्स पर कैश अपडेट कर रहा है

  • <पी> राइट्स पर कैश अपडेट करना

  • <पी> सेवल्ला में तैनाती

  • <पी> Redis Next.js API के साथ अच्छा क्यों काम करता है

  • <पी> निष्कर्ष

कैशिंग क्यों मायने रखती है

<पी> हर बार जब आपका एपीआई डेटाबेस से टकराता है, तो इसमें समय और संसाधनों की खपत होती है। डेटाबेस संरचित डेटा को संग्रहीत करने और क्वेरी करने में बहुत अच्छे हैं, लेकिन जब आपको प्रति सेकंड हजारों पढ़ने के अनुरोधों को पूरा करने की आवश्यकता होती है, तो वे बड़े पैमाने पर गति के लिए अनुकूलित नहीं होते हैं।

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

<पी> उदाहरण के लिए, यदि आप प्रत्येक अनुरोध पर डेटाबेस से उपयोगकर्ताओं की सूची लाते हैं, तो क्वेरी चलाने और परिणाम वापस करने में 200ms लग सकते हैं। रेडिस कैशिंग के साथ, पहला अनुरोध परिणाम को मेमोरी में संग्रहीत करता है, और बाद के अनुरोध 10ms से कम समय में समान डेटा वापस कर सकते हैं। यह परिमाण के क्रम में सुधार है।

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

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

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

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

<पी> जब हम नेक्स्ट.जेएस में बनाए गए एपीआई जैसे एपीआई के साथ जुड़ते हैं, तो रेडिस आपको मुख्य डेटाबेस पर लोड कम करने और ग्राहकों को बहुत तेज़ प्रतिक्रिया देने में मदद करता है।

परियोजना की स्थापना

<पी> आइए रिपॉजिटरी को क्लोन करें:

git clone git@github.com:manishmshiva/nextjs-api-pgsql.git next-api
<पी> अब डायरेक्टरी में जाएं और पैकेज इंस्टॉल करने के लिए npm इंस्टॉल करें।

cd next-api
npm i
<पी> एक .env फ़ाइल बनाएं और सेवल्ला से डेटाबेस URL को एक पर्यावरण चर में जोड़ें।

cat .env
<पी> .env फ़ाइल इस तरह दिखनी चाहिए:

PGSQL_URL=postgres://<username>:<password>-@asia-east1-001.proxy.kinsta.app:30503/<db_name>
<पी> अब आइए एप्लिकेशन प्रारंभ करके और कुछ एपीआई अनुरोध करके सुनिश्चित करें कि एप्लिकेशन अपेक्षा के अनुरूप काम करता है।

<पी> ऐप प्रारंभ करना:

npm run dev
<पी> आइए सुनिश्चित करें कि डेटाबेस जुड़ा हुआ है। localhost:3000 पर जाएं आपके ब्राउज़र पर. इसे निम्नलिखित JSON लौटाना चाहिए:

<पी> सेवल्ला पर रेडिस कैशिंग के साथ नेक्स्ट.जेएस एपीआई प्रदर्शन को बढ़ावा दें

<पी> आइए एक नया उपयोगकर्ता बनाएं। पोस्टमैन का उपयोग करके DB में एक नई प्रविष्टि बनाने के लिए, निम्नलिखित JSON के साथ एक POST अनुरोध भेजें:

{"id":"d9553bb7-2c72-4d92-876b-9c3b40a8c62c","name":"Larry","email":"larry@example.com","age":"25"}
<पी> सेवल्ला पर रेडिस कैशिंग के साथ नेक्स्ट.जेएस एपीआई प्रदर्शन को बढ़ावा दें

<पी> आइए सुनिश्चित करें कि localhost:3000/users पर जाकर रिकॉर्ड बनाया गया है ब्राउज़र में.

<पी> सेवल्ला पर रेडिस कैशिंग के साथ नेक्स्ट.जेएस एपीआई प्रदर्शन को बढ़ावा दें

<पी> बढ़िया. आइए अब Redis का उपयोग करके इन API को कैश करें।

रेडिस का प्रावधान

<पी> आइए सेवल्ला के डैशबोर्ड पर जाएं और "डेटाबेस" पर क्लिक करें। सूची से "रेडिस" चुनें, और बाकी विकल्पों को डिफ़ॉल्ट के रूप में छोड़ दें।

<पी> सेवल्ला पर रेडिस कैशिंग के साथ नेक्स्ट.जेएस एपीआई प्रदर्शन को बढ़ावा दें

<पी> एक बार डेटाबेस बन जाने के बाद, "बाहरी कनेक्शन" विकल्प पर स्विच करें और सार्वजनिक रूप से पहुंच योग्य URL को कॉपी करें।

<पी> सेवल्ला पर रेडिस कैशिंग के साथ नेक्स्ट.जेएस एपीआई प्रदर्शन को बढ़ावा दें

<पी> .env फ़ाइल में इसे इस तरह दिखना चाहिए:

REDIS_URL=redis://default:<password>@<host>:<port>
<पी> अब Node.js के लिए Redis क्लाइंट स्थापित करें:

npm install ioredis
<पी> अब हम रेडिस से जुड़ सकते हैं और इसे अपने उपयोगकर्ता एपीआई के लिए कैश लेयर के रूप में उपयोग कर सकते हैं। आइए देखें कि कैशिंग कैसे लागू करें।

रीड्स पर कैश अपडेट कर रहा है

<पी> यहां अद्यतन users/route.ts है जो Redis का उपयोग करता है:

import { NextResponse } from "next/server";
import { Client } from "pg";
import Redis from "ioredis";
const redis = new Redis(process.env.REDIS_URL!);
async function readUsers() {
 const client = new Client({
 connectionString: process.env.PGSQL_URL,
 });
 await client.connect();
 try {
 const result = await client.query("SELECT id, name, email, age FROM users");
 return result.rows;
 } finally {
 await client.end();
 }
}
export async function GET() {
 try {
 // Check cache first
 const cached = await redis.get("users");
 if (cached) {
 return NextResponse.json(JSON.parse(cached));
 }
 // Fallback to database if not cached
 const users = await readUsers();
 // Store result in cache with 60s TTL
 await redis.set("users", JSON.stringify(users), "EX", 60);
 return NextResponse.json(users);
 } catch (err) {
 return NextResponse.json({ error: "Failed to fetch users" }, { status: 500 });
 }
}
<पी> अब, जब आप /users दबाते हैं :

  1. <पी> एपीआई सबसे पहले रेडिस की जांच करता है।

  2. <पी> यदि डेटा मौजूद है, तो यह उसे तुरंत लौटा देता है।

  3. <पी> यदि नहीं, तो यह PostgreSQL पर सवाल उठाता है, परिणाम को Redis में सहेजता है, और फिर उसे वापस कर देता है।

<पी> यह बार-बार किए गए अनुरोधों को बहुत तेजी से पूरा करता है। आप कैश समाप्ति (EX 60) को समायोजित कर सकते हैं ) यह इस बात पर निर्भर करता है कि आपका डेटा कितना ताज़ा होना चाहिए।

<पी> रेडिस कैशिंग के बिना, /users प्राप्त किया जा रहा है दस गुना का अर्थ है दस डेटाबेस क्वेरीज़। डेटाबेस आकार और नेटवर्क विलंबता के आधार पर प्रत्येक में लगभग 150-200ms का समय लग सकता है।

<पी> रेडिस के साथ, पहले अनुरोध में अभी भी ~200ms लगते हैं क्योंकि यह कैश को पॉप्युलेट करता है। लेकिन उसके बाद प्रत्येक अनुरोध लगभग तुरंत होता है, अक्सर 10ms से कम। यह 20 गुना सुधार है .

<पी> यह स्पीडअप तब मायने रखता है जब आपका एपीआई प्रति सेकंड सैकड़ों या हजारों अनुरोधों का सामना करता है। कैशिंग न केवल विलंबता को कम करती है बल्कि आपके डेटाबेस पर लोड को भी हल्का करती है।

लिखने पर कैश अपडेट करना

<पी> अभी, केवल GET अनुरोध ही कैश का उपयोग करते हैं। लेकिन अगर हम नए उपयोगकर्ता जोड़ें तो क्या होगा? कैश अभी भी पुराना डेटा लौटाएगा।

<पी> इसका समाधान यह है कि जब भी कोई लेखन होता है तो कैश को अद्यतन या साफ़ किया जाए। आइए POST को अपडेट करें हैंडलर:

export async function POST(req: Request) {
 try {
 const body = await req.json();
 const client = new Client({
 connectionString: process.env.PGSQL_URL,
 });
 await client.connect();
 const query = `
 INSERT INTO users (id, name, email, age)
 VALUES ($1, $2, $3, $4)
 RETURNING *;
 `;
 const result = await client.query(query, [
 body.id,
 body.name,
 body.email,
 body.age,
 ]);
 await client.end();
 // Invalidate cache so next GET fetches fresh data
 await redis.del("users");
 return NextResponse.json(result.rows[0]);
 } catch (err) {
 return NextResponse.json({ error: "Failed to add user" }, { status: 500 });
 }
}
<पी> अब जब भी कोई नया उपयोगकर्ता बनाया जाता है, तो users के लिए कैश साफ़ कर दिया गया है. अगला GET अनुरोध डेटाबेस से लाया जाएगा, कैश को रीफ्रेश किया जाएगा, और फिर कैश्ड डेटा की सेवा जारी रखी जाएगी।

सेवल्ला में तैनाती

<पी> अपना कोड GitHub पर पुश करें या मेरी रिपॉजिटरी को फोर्क करें। अब सेवल्ला चलते हैं और एक नया ऐप बनाते हैं।

<पी> सेवल्ला पर रेडिस कैशिंग के साथ नेक्स्ट.जेएस एपीआई प्रदर्शन को बढ़ावा दें

<पी> ड्रॉपडाउन से अपना रिपॉजिटरी चुनें और "कमिट पर स्वचालित परिनियोजन" जांचें। इससे यह सुनिश्चित हो जाएगा कि हर बार जब आप कोड पुश करेंगे तो तैनाती स्वचालित होगी। संसाधन अनुभाग के अंतर्गत "शौक" चुनें।

<पी> सेवल्ला पर रेडिस कैशिंग के साथ नेक्स्ट.जेएस एपीआई प्रदर्शन को बढ़ावा दें

<पी> "बनाएं" पर क्लिक करें न कि "बनाएं और तैनात करें" पर। हमने अपने PostgreSQL URL और Redis URL को पर्यावरण चर के रूप में नहीं जोड़ा है, इसलिए यदि आप इसे तैनात करने का प्रयास करेंगे तो ऐप क्रैश हो जाएगा।

<पी> "पर्यावरण चर" अनुभाग पर जाएं और मान फ़ील्ड में कुंजी "PGSQL_URL" और URL जोड़ें। "REDIS_URL" कुंजी के लिए भी ऐसा ही करें और Redis URL जोड़ें।

<पी> सेवल्ला पर रेडिस कैशिंग के साथ नेक्स्ट.जेएस एपीआई प्रदर्शन को बढ़ावा दें

<पी> अब "अवलोकन" अनुभाग पर वापस जाएं और "अभी तैनात करें" पर क्लिक करें।

<पी> सेवल्ला पर रेडिस कैशिंग के साथ नेक्स्ट.जेएस एपीआई प्रदर्शन को बढ़ावा दें

<पी> एक बार परिनियोजन पूरा हो जाने पर, अपने एपीआई का लाइव यूआरएल प्राप्त करने के लिए "ऐप पर जाएं" पर क्लिक करें। आप पोस्टमैन में लोकलहोस्ट:3000 को नए यूआरएल से बदल सकते हैं और अपने एपीआई का परीक्षण कर सकते हैं।

क्यों Redis Next.js API के साथ अच्छा काम करता है

<पी> रेडिस हल्का है, तेज़ है, और एपीआई प्रतिक्रियाओं को कैशिंग करने के लिए एकदम सही है। Next.js के संदर्भ में, यह स्वाभाविक रूप से फिट बैठता है क्योंकि:

  • <पी> एपीआई रूट सर्वर-साइड पर चलते हैं जहां रेडिस से सीधे पूछताछ की जा सकती है।

  • <पी> डेटाबेस कॉल में कैशिंग लॉजिक जोड़ना आसान है।

  • <पी> रेडिस का उपयोग कैशिंग से अधिक के लिए किया जा सकता है - दर सीमित करना, सत्र भंडारण और पब/उप जैसी चीजें भी सामान्य पैटर्न हैं।

<पी> सेवल्ला पर Next.js, PostgreSQL और Redis को मिलाकर, आपको एक स्टैक मिलता है जो तेज़, स्केलेबल और तैनात करने में आसान है।

निष्कर्ष

<पी> कैशिंग केवल एक अनुकूलन नहीं है - यह वास्तविक दुनिया एपीआई के लिए एक आवश्यकता है। Next.js आपको मजबूत बैकएंड एपीआई बनाने में मदद करता है जिसे आसानी से तैनात किया जा सकता है। रेडिस को मिश्रण में जोड़कर, वे एपीआई बिना किसी परेशानी के स्केल को संभाल सकते हैं।

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

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


  1. पायथन में एक शतरंज नाइट द्वारा लक्ष्य की स्थिति तक पहुंचने के लिए न्यूनतम कदम खोजने का कार्यक्रम पायथन में एक शतरंज नाइट द्वारा लक्ष्य की स्थिति तक पहुंचने के लिए न्यूनतम कदम खोजने का कार्यक्रम

    मान लीजिए हमारे पास दो मान r और c हैं। यदि एक शतरंज के शूरवीर को एक असीम रूप से बड़े शतरंज बोर्ड में शुरुआत में निर्देशांक (0, 0) पर रखा जाता है, तो हमें स्थान (आर, सी) तक पहुंचने के लिए न्यूनतम चालों की संख्या का पता लगाना होगा। शूरवीर शतरंज के समान गतिमान शैली का अनुसरण करेगा। यह क्षैतिज रूप से दो

  1. रेडिस को .NET 8/9/10 के साथ एकीकृत करना:एक व्यापक चरण-दर-चरण ट्यूटोरियल रेडिस को .NET 8/9/10 के साथ एकीकृत करना:एक व्यापक चरण-दर-चरण ट्यूटोरियल

    रेडिस एक उच्च-प्रदर्शन, इन-मेमोरी डेटा स्टोर है जिसका व्यापक रूप से कैशिंग, सत्र प्रबंधन, रीयल-टाइम एनालिटिक्स और बहुत कुछ के लिए उपयोग किया जाता है। इस गाइड में, हम यह पता लगाएंगे कि StackExchange.Redis का उपयोग करके Redis को .NET एप्लिकेशन के साथ कैसे एकीकृत किया जाए। , .NET के लिए सबसे लोकप्रिय R

  1. MongoDB में व्यर्थ स्थान को कम करने की रणनीतियाँ MongoDB में व्यर्थ स्थान को कम करने की रणनीतियाँ

    ऐपबॉय मोबाइल ऐप्स के लिए दुनिया का अग्रणी मार्केटिंग ऑटोमेशन प्लेटफॉर्म है। हम अपने ग्राहकों के मोबाइल ऐप में उपयोगकर्ता क्या कर रहे हैं, इस पर नज़र रखते हुए और उन्हें अपने व्यवहार या जनसांख्यिकी के आधार पर ईमेल, पुश नोटिफिकेशन और इन-ऐप संदेशों के लिए उपयोगकर्ताओं को लक्षित करने की अनुमति देकर हर मह