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

Upstash Redis का उपयोग करके Next.js API रूट्स को सीमित करें

इस लेख में, हम दिखाएंगे कि Upstash दर सीमा SDK

का उपयोग करके अपने Next.js API मार्गों को सीमित कैसे करें?

डेटाबेस सेटअप

Upstash कंसोल या Upstash CLI का उपयोग करके एक Redis डेटाबेस बनाएँ। UPSTASH_REDIS_REST_URL को कॉपी करें और UPSTASH_REDIS_REST_TOKEN अगले चरणों के लिए।

प्रोजेक्ट सेटअप

हम एक Next.js एप्लिकेशन बनाएंगे और Vercel पर परिनियोजित करेंगे।

npx create-next-app@latest

@upstash/ratelimit इंस्टॉल करें:

npm install @upstash/ratelimit @upstash/redis

कोड

अपने pages/api/hello.js को अपडेट करें जैसा नीचे दिया गया है और UPSTASH_REDIS_REST_URL . को बदलें और UPSTASH_REDIS_REST_TOKEN

pages/api/hello.js
import {Ratelimit} from "@upstash/ratelimit";
import {Redis} from "@upstash/redis";


const redis = new Redis({
  url: 'UPSTASH_REDIS_REST_URL',
  token: 'UPSTASH_REDIS_REST_TOKEN',
})

// Create a new ratelimiter, that allows 5 requests per 5 seconds
const ratelimit = new Ratelimit({
  redis: redis,
  limiter: Ratelimit.fixedWindow(5, "5 s"),
});

export default async function handler(req, res) {
// Use a constant string to limit all requests with a single ratelimit
// Or use a userID, apiKey or ip address for individual limits.
  const identifier = "api";
  const result = await ratelimit.limit(identifier);
  res.setHeader('X-RateLimit-Limit', result.limit)
  res.setHeader('X-RateLimit-Remaining', result.remaining)

  if (!result.success) {
    res.status(200).json({message: 'The request has been rate limited.', rateLimitState: result})
    return
  }

  res.status(200).json({name: 'John Doe', rateLimitState: result})
}

यहां, हम प्रति 5 सेकंड में 5 अनुरोधों की अनुमति देते हैं।

चलाएं

ऐप को npm run dev के साथ चलाएं . ब्राउज़र को 5 से अधिक बार रीफ़्रेश करें और आप कार्रवाई में सीमित दर देखेंगे।

{"message":"The request has been rate limited.","rateLimitState":{"success":false,"limit":5,"remaining":-1,"reset":1654546770000,"pending":{}}}

संभावित एन्हांसमेंट

  • प्रति उपयोगकर्ता उपयोग को सीमित करने के लिए पहचानकर्ता के रूप में अपने उपयोगकर्ता के आईडी या आईपी पते का उपयोग करें।
   const identifier = getClientIp(req);
   const result = await ratelimit.limit(identifier);
  • स्लाइडिंग विंडो एल्गोरिथम का उपयोग करें ताकि एक आसान (लेकिन अधिक महंगा) दर सीमित अनुभव प्राप्त हो सके।
 const ratelimit = new Ratelimit({
  redis: redis,
  limiter: Ratelimit.slidingWindow(10, "10 s"),
});
  • टोकन बकेट एल्गोरिथम का उपयोग कुछ मात्रा में स्पाइक को सहन करने के लिए करें।
 const ratelimit = new Ratelimit({
  redis: redis,
  limiter: Ratelimit.tokenBucket(5, "10 s", 10),
});
  • यदि आपका Next.js एप्लिकेशन विभिन्न क्षेत्रों में परिनियोजित है, तो विभिन्न क्षेत्रों में एकाधिक Redis का उपयोग करें। यह आपको विभिन्न स्थानों के लिए विलंबता को कम करने में मदद करेगा।

  • पर्यावरण चर या गुप्त स्टोर से अपने Upstash Redis क्रेडेंशियल रखें और पढ़ें।


  1. सर्वर रहित क्लाउड, Next.js और Upstash Redis के साथ आरंभ करें

    सर्वरलेस क्लाउड उस टीम का बैकएंड प्लेटफॉर्म है जिसने Serverless Framework . बनाया है . यह डेवलपर उत्पादकता को बढ़ावा देने के लिए एक ही मंच में क्लाउड रनटाइम, सीएलआई और एसडीके प्रदान करता है। इस पोस्ट में, हम एक नेक्स्ट.जेएस एप्लिकेशन बनाएंगे जो सर्वरलेस रेडिस (अपस्टैश) से डेटा पढ़ता है और इसे सर्वरल

  1. सर्वर रहित रेडिस के साथ रेंडर का उपयोग करना

    रेंडर एक शक्तिशाली बुनियादी ढांचा मंच है जो अन्य चीजों के साथ तत्काल तैनाती और ऑटोस्केलिंग प्रदान करता है। आज हम Upstash के साथ एक सरल Next.js एप्लिकेशन बना रहे हैं और फिर उसे रेंडर पर परिनियोजित करेंगे। नोट:यह ट्यूटोरियल मानता है कि आपने Upstash पर पहले से ही एक Redis इंस्टेंस सेट कर लिया है। यदि

  1. सर्वर रहित रेडिस पर पाइपलाइन रेस्ट एपीआई

    Upstash देशी Redis API के अलावा REST API का भी समर्थन करता है। आरईएसटी एपीआई डेवलपर्स को सर्वर रहित और किनारे के कार्यों से कनेक्शन के मुद्दों के बिना अपने रेडिस तक पहुंचने में मदद करता है। लेकिन अगर आप एक ही फ़ंक्शन में कई रेडिस कमांड निष्पादित करते हैं, तो इसका मतलब है कि आप डेटाबेस को कई बार कॉल