जब आप Next.js के बारे में सुनते हैं, तो आपका पहला विचार स्टैटिक वेबसाइट या React-चालित फ्रंटएंड हो सकता है। लेकिन यह कहानी का केवल एक हिस्सा है। Next.js पूर्ण-विशेषताओं वाले बैकएंड APIs को भी शक्ति दे सकता है जिन्हें आप किसी अन्य बैकएंड सर्विस की तरह होस्ट और स्केल कर सकते हैं।
एक पहले के लेख में, मैंने Next.js API बनाने और इसे Sevalla के साथ डिप्लॉय करने के बारे में बताया था। उदाहरण ने डेटा को PostgreSQL डेटाबेस में स्टोर किया और रिक्वेस्ट को सीधे संभाला। यह ठीक काम करता था, लेकिन जैसे-जैसे ट्रैफिक बढ़ता है, APIs जो हर रिक्वेस्ट पर डेटाबेस को हिट करते हैं, धीमे हो सकते हैं।
यहीं कैशिंग काम आती है। Redis को कैश लेयर के रूप में जोड़कर, हम अपने Next.js API को बहुत तेज़ और अधिक कुशल बना सकते हैं। इस लेख में, हम देखेंगे कि अपने API में Redis कैशिंग कैसे जोड़ें, इसे Sevalla के साथ डिप्लॉय करें, और मापने योग्य सुधार दिखाएं।
पिछले लेख में, मैंने API को विस्तार से समझाया था। इसलिए आप इस रिपॉजिटरी का उपयोग इस प्रोजेक्ट के लिए आधार के रूप में कर सकते हैं।
विषय सूची
कैशिंग क्यों मायने रखती है
Redis क्या है?
प्रोजेक्ट सेटअप करना
Redis प्रोविजनिंग
रीड पर कैश अपडेट करना
राइट पर कैश अपडेट करना
Sevalla पर डिप्लॉय करना
Redis Next.js APIs के साथ अच्छा क्यों काम करता है
निष्कर्ष
कैशिंग क्यों मायने रखती है
हर बार जब आपका API डेटाबेस को हिट करता है, तो यह समय और संसाधनों का उपभोग करता है। डेटाबेस संरचित डेटा को स्टोर करने और क्वेरी करने में महान हैं, लेकिन जब आपको प्रति सेकंड हजारों रीड रिक्वेस्ट सर्व करने की आवश्यकता होती है तो वे स्केल पर गति के लिए अनुकूलित नहीं होते।
कैशिंग इसे हल करता है बार-बार एक्सेस किए जाने वाले डेटा को मेमोरी में रखकर। हर बार डेटाबेस से पूछने के बजाय, यदि डेटा उपलब्ध है तो API सीधे कैश से डेटा वापस कर सकता है। Redis इसके लिए एकदम सही है क्योंकि यह प्रदर्शन के लिए डिज़ाइन किया गया एक इन-मेमोरी की-वैल्यू स्टोर है।
उदाहरण के लिए, यदि आप हर रिक्वेस्ट पर डेटाबेस से यूज़र्स की सूची लाते हैं, तो क्वेरी चलाने और परिणाम लौटाने में 200ms लग सकते हैं। Redis कैशिंग के साथ, पहला रिक्वेस्ट परिणाम को मेमोरी में स्टोर करता है, और बाद के रिक्वेस्ट 10ms से कम में वही डेटा वापस कर सकते हैं। यह क्रम-के-परिमाण में सुधार है।
Redis क्या है?
Redis एक इन-मेमोरी डेटा स्टोर है जो सुपर-फास्ट डेटाबेस की तरह काम करता है। डिस्क से लिखने और पढ़ने के बजाय, यह डेटा को मेमोरी में रखता है, जो इसे अविश्वसनीय रूप से तेज़ बनाता है। इसलिए इसे अक्सर कैश के रूप में उपयोग किया जाता है, जहां गति दीर्घकालिक स्टोरेज से अधिक महत्वपूर्ण होती है।
यह बहुत कम लेटेंसी के साथ हाई-थ्रूपुट वर्कलोड को संभालने के लिए डिज़ाइन किया गया है, जिसका अर्थ है कि यह माइक्रोसेकंड में प्रतिक्रिया दे सकता है। यह इसे API प्रतिक्रियाओं को कैश करने, सत्र डेटा स्टोर करने, या चैट सिस्टम और लीडरबोर्ड जैसे रीयल-टाइम एप्लिकेशन को शक्ति देने जैसे उपयोग के मामलों के लिए एक आदर्श फिट बनाता है।
एक पारंपरिक डेटाबेस के विपरीत, Redis सादगी और गति पर केंद्रित है। यह डेटा को की-वैल्यू पेयर के रूप में स्टोर करता है, इसलिए आप जटिल क्वेरी लिखे बिना जल्दी से वैल्यू ला या अपडेट कर सकते हैं। और क्योंकि यह सूचियों, सेट्स और हैश जैसे उन्नत डेटा प्रकारों का समर्थन करता है, यह एक सादे की-वैल्यू स्टोर की तुलना में बहुत अधिक लचीला है।
Next.js जैसे API के साथ संयुक्त होने पर, Redis मुख्य डेटाबेस पर लोड को कम करने और क्लाइंट को धधकती-तेज़ प्रतिक्रियाएं देने में मदद करता है।
प्रोजेक्ट सेटअप करना
आइए रिपॉजिटरी को क्लोन करें:
git clone git@github.com:manishmshiva/nextjs-api-pgsql.git next-api
अब आइए डायरेक्टरी में जाएं और पैकेज इंस्टॉल करने के लिए npm install करें।
cd next-api
npm i
एक .env फ़ाइल बनाएं और Sevalla से डेटाबेस URL को एक एनवायरनमेंट वेरिएबल में जोड़ें।
cat .env
.env फ़ाइल इस तरह दिखनी चाहिए:
PGSQL_URL=postgres://:-@asia-east1-001.proxy.kinsta.app:30503/
अब आइए सुनिश्चित करें कि एप्लिकेशन अपेक्षित रूप से काम करता है एप्लिकेशन शुरू करके और कुछ API रिक्वेस्ट करके।
ऐप शुरू करना:
npm run dev
आइए सुनिश्चित करें कि डेटाबेस जुड़ा हुआ है। अपने ब्राउज़र पर localhost:3000 पर जाएं। यह निम्न JSON लौटाना चाहिए:

आइए एक नया यूज़र बनाएं। Postman का उपयोग करके DB में एक नई एंट्री बनाने के लिए, निम्न JSON के साथ एक POST रिक्वेस्ट भेजें:
{"id":"d9553bb7-2c72-4d92-876b-9c3b40a8c62c","name":"Larry","email":"larry@example.com","age":"25"}

ब्राउज़र में localhost:3000/users पर जाकर सुनिश्चित करें कि रिकॉर्ड बनाया गया है।

बढ़िया। अब आइए इन APIs को Redis का उपयोग करके कैश करें।
Redis प्रोविजनिंग
आइए Sevalla के डैशबोर्ड पर जाएं और "Databases" पर क्लिक करें। सूची से "Redis" चुनें, और बाकी विकल्पों को डिफ़ॉल्ट छोड़ दें।

एक बार डेटाबेस बन जाने के बाद, "external connection" विकल्प को चालू करें और सार्वजनिक रूप से सुलभ URL कॉपी करें।

.env फ़ाइल में यह इस तरह दिखना चाहिए:
REDIS_URL=redis://default:@:
अब Node.js के लिए एक Redis क्लाइंट इंस्टॉल करें:
npm install ioredis
हम अब Redis से कनेक्ट कर सकते हैं और इसे अपने यूज़र्स API के लिए कैश लेयर के रूप में उपयोग कर सकते हैं। आइए देखें कि कैशिंग कैसे लागू करें।
रीड पर कैश अपडेट करना
यहां अपडेटेड 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 {
// पहले कैश जांचें
const cached = await redis.get("users");
if (cached) {
return NextResponse.json(JSON.parse(cached));
}
// कैश में न होने पर डेटाबेस पर फॉलबैक
const users = await readUsers();
// परिणाम को 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 को हिट करते हैं:
API पहले Redis की जांच करता है।
यदि डेटा मौजूद है, तो यह इसे तुरंत लौटाता है।
यदि नहीं, तो यह PostgreSQL को क्वेरी करता है, परिणाम को Redis में सहेजता है, और फिर इसे लौटाता है।
यह दोहराए गए रिक्वेस्ट को अत्यंत तेज़ बनाता है। आप कैश एक्सपायरी (EX 60) को इस आधार पर समायोजित कर सकते हैं कि आपका डेटा कितना ताज़ा होना चाहिए।
Redis कैशिंग के बिना, /users को दस बार लाने का मतलब है दस डेटाबेस क्वेरी। प्रत्येक को डेटाबेस आकार और नेटवर्क लेटेंसी के आधार पर लगभग 150-200ms लग सकते हैं।
Redis के साथ, पहला रिक्वेस्ट अभी भी ~200ms लेता है क्योंकि यह कैश को पॉप्युलेट करता है। लेकिन उसके बाद हर रिक्वेस्ट लगभग तत्काल होता है, अक्सर 10ms से कम। यह 20x सुधार है।
यह स्पीडअप तब मायने रखता है जब आपका API प्रति सेकंड सैकड़ों या हजारों रिक्वेस्ट का सामना करता है। कैशिंग न केवल लेटेंसी को कम करता है बल्कि आपके डेटाबेस पर लोड को भी हल्का करता है।
राइट पर कैश अपडेट करना
अभी, केवल 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();
// कैश को अमान्य करें ताकि अगला GET ताज़ा डेटा लाए
await redis.del("users");
return NextResponse.json(result.rows[0]);
} catch (err) {
return NextResponse.json({ error: "Failed to add user" }, { status: 500 });
}
}
अब जब भी एक नया यूज़र बनाया जाता है, users का कैश क्लियर हो जाता है। अगला GET रिक्वेस्ट डेटाबेस से लाएगा, कैश को रीफ्रेश करेगा, और फिर कैश्ड डेटा सर्व करना जारी रखेगा।
Sevalla पर डिप्लॉय करना
अपने कोड को GitHub पर पुश करें या मेरा रिपॉजिटरी फोर्क करें। अब Sevalla पर जाएं और एक नया ऐप बनाएं।

ड्रॉपडाउन से अपना रिपॉजिटरी चुनें और "Automatic deployment on commit" चेक करें। यह सुनिश्चित करेगा कि हर बार जब आप कोड पुश करते हैं तो डिप्लॉयमेंट स्वचालित हो। संसाधन अनुभाग के तहत "Hobby" चुनें।

"Create" पर क्लिक करें न कि "Create and deploy"। हमने अभी तक अपने PostgreSQL URL और Redis URL को एनवायरनमेंट वेरिएबल के रूप में नहीं जोड़ा है, इसलिए यदि आप इसे डिप्लॉय करने का प्रयास करते हैं तो ऐप क्रैश हो जाएगा।
"Environment variables" सेक्शन पर जाएं और "PGSQL_URL" कुंजी और URL को वैल्यू फ़ील्ड में जोड़ें। "REDIS_URL" कुंजी और Redis URL के लिए भी ऐसा ही करें।

अब "Overview" सेक्शन पर वापस जाएं और "Deploy now" पर क्लिक करें।

एक बार डिप्लॉयमेंट पूरा हो जाने पर, अपने API का लाइव URL प्राप्त करने के लिए "Visit app" पर क्लिक करें। आप Postman में localhost:3000 को नए URL से बदल सकते हैं और अपने API का परीक्षण कर सकते हैं।
Redis Next.js APIs के साथ अच्छा क्यों काम करता है
Redis हल्का, धधकता हुआ तेज़ है, और API प्रतिक्रियाओं को कैश करने के लिए एकदम सही है। Next.js के संदर्भ में, यह स्वाभाविक रूप से फिट बैठता है क्योंकि:
API रूट सर्वर-साइड चलते हैं जहां Redis को सीधे क्वेरी किया जा सकता है।
डेटाबेस कॉल के चारों ओर कैशिंग लॉजिक जोड़ना सरल है।
Redis का उपयोग कैशिंग से अधिक के लिए किया जा सकता है - रेट लिमिटिंग, सत्र स्टोरेज, और पब/सब भी सामान्य पैटर्न हैं।
Next.js, PostgreSQL, और Redis को Sevalla पर संयोजित करके, आपको एक स्टैक मिलता है जो तेज़, स्केलेबल, और डिप्लॉय करने में आसान है।
निष्कर्ष
कैशिंग केवल एक अनुकूलन नहीं है - यह वास्तविक दुनिया के APIs के लिए एक आवश्यकता है। Next.js आपको मजबूत बैकएंड APIs बनाने में मदद करता है जिन्हें आसानी से डिप्लॉय किया जा सकता है। Redis को मिश्रण में जोड़कर, वे APIs पसीना बहाए बिना स्केल को संभाल सकते हैं।
Sevalla मैनेज्ड PostgreSQL, Redis, और ऐप होस्टिंग को एक ही स्थान पर प्रदान करके यह सब एक साथ बांधता है। कुछ एनवायरनमेंट वेरिएबल और एक GitHub रिपॉजिटरी के साथ, आप स्थानीय डेव से प्रोडक्शन-रेडी, कैश्ड API तक मिनटों में जा सकते हैं।
उम्मीद है आपको यह लेख पसंद आया। मेरे मुफ़्त AI न्यूज़लेटर के लिए साइन अप करें TuringTalks.ai AI पर अधिक हैंड्स-ऑन ट्यूटोरियल के लिए। आप मुझे LinkedIn पर भी ढूंढ सकते हैं।