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

.NET 8 Web API में Redis को प्राथमिक डेटा स्टोर के रूप में उपयोग करना

परिचय

इस लेख में, मैं Redis पर चर्चा करने जा रहा हूं और इसे अपने डेटा को स्टोर करने के लिए प्राथमिक डेटाबेस के रूप में उपयोग करने के उपयोग के मामलों पर चर्चा करूंगा।

  • Redis का परिचय
  • Redis डेटा प्रकार
  • Redis को DB के रूप में उपयोग करने के फायदे और नुकसान
  • कंटेनर में Redis सेटअप करना
  • .NET 8 Web API के साथ Redis को प्राथमिक डेटाबेस के रूप में उपयोग करना

पूर्वापेक्षाएँ

  • Visual Studio Code
  • .NET 8 SDK
  • Redis Desktop Manager (https://redis.io/resources/tools/ से डाउनलोड करें)
  • Docker Desktop
  • पैकेज
    • Microsoft.Extensions.Caching.StackExchangeRedis
    • StackExchange.Redis

Redis का परिचय

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

डेटा स्थायित्व के मुद्दे को हल करने के लिए, Redis विभिन्न तंत्र प्रदान करता है जैसे स्नैपशॉट्स और अपेंड-ओनली फाइल्स (AOF)। ये तंत्र आपको डेटा को डिस्क पर लगातार स्टोर करने की अनुमति देते हैं, यह सुनिश्चित करते हुए कि सिस्टम रीबूट के बाद भी इसे पुनर्प्राप्त किया जा सकता है। आप Redis Persistence के बारे में और जान सकते हैं।

ज्यादातर Redis का उपयोग कैश लेयर के रूप में किया जाता है लेकिन हम इसे अन्य जटिल डेटाबेस सिस्टम पर कॉल कम करने के लिए डेटाबेस के रूप में भी उपयोग कर सकते हैं। Redis डॉक्यूमेंट डेटाबेस मॉडल का उपयोग करता है जहां यह डेटा को डॉक्यूमेंट्स में स्टोर करता है, ज्यादातर JSON प्रारूप में।

Redis डेटा प्रकार

Redis कई डेटा प्रकार प्रदान करता है जो हमें कैशिंग, क्यूइंग और इवेंट प्रोसेसिंग से समस्याओं को हल करने की अनुमति देते हैं।

  • स्ट्रिंग्स: बाइट्स के अनुक्रम का प्रतिनिधित्व करता है
  • सूचियाँ: स्ट्रिंग्स की सूचियाँ
  • सेट्स: अद्वितीय स्ट्रिंग्स का अनऑर्डर्ड संग्रह
  • हैश: फील्ड-वैल्यू जोड़े के संग्रह के रूप में मॉडल किए गए रिकॉर्ड प्रकार

Redis को DB के रूप में उपयोग करने के फायदे

  • उच्च प्रदर्शन
  • बहुमुखी डेटा संरचना
  • कम विलंबता
  • स्केलेबिलिटी

Redis को DB के रूप में उपयोग करने के नुकसान

  • डेटा स्थायित्व
  • सीमित क्वेरी क्षमताएं
  • मेमोरी बाधाएं

कंटेनर में Redis सेटअप करना

सुनिश्चित करें कि Docker Desktop चल रहा है और Visual Studio 2022 खोलें।

"नया प्रोजेक्ट बनाएं" चुनें --> "ASP.NET Core Web API" पर क्लिक करें और फिर "अगला" पर क्लिक करें।

कॉन्फ़िगर पेज पर, प्रोजेक्ट नाम दर्ज करें और फिर "अगला" दबाएं।

.NET 8 Web API में Redis को प्राथमिक डेटा स्टोर के रूप में उपयोग करना

अतिरिक्त जानकारी पेज पर, स्क्रीनशॉट के अनुसार जानकारी चुनें और "बनाएं" चुनें।

.NET 8 Web API में Redis को प्राथमिक डेटा स्टोर के रूप में उपयोग करना

अब, हमारे Redis के लिए कॉन्फ़िगरेशन रखने के लिए "docker-compose.yaml" फाइल बनाएं और नीचे दिया गया कोड पेस्ट करें।

version: '3.8'
services:
  redis:
    image: redis:alpine
    container_name: redisStudentAPI
    ports:
      - 6379:6379

उसके बाद, टूल्स -> कमांड लाइन -> डेवलपर पावरशेल से डेवलपर पावरशेल प्रॉम्प्ट खोलें।

फिर प्रोजेक्ट फोल्डर के अंदर नेविगेट करें और YAML फाइल चलाने के लिए कमांड दर्ज करें: docker compose up -d

Docker Desktop खोलें, और कंटेनरों पर नेविगेट करें, आप YAML फाइल से बने कंटेनर को देख सकते हैं। साथ ही, आप चल रहे कंटेनरों को देखने के लिए docker ps चला सकते हैं।

.NET 8 Web API में Redis को प्राथमिक डेटा स्टोर के रूप में उपयोग करना

Redis सर्वर के साथ इंटरैक्ट करने के लिए, आपको कंटेनर ID के साथ नीचे दी गई कमांड चलाने की आवश्यकता है।

docker exec -it <container_id> /bin/sh

Docker का बुनियादी सेटअप हो गया है और हम कमांड लाइन के माध्यम से Redis के साथ इंटरैक्ट कर सकते हैं।

अब, हम स्ट्रिंग डेटा प्रकारों के बारे में अधिक देखेंगे क्योंकि हम कुंजी और मान जोड़ी को स्ट्रिंग्स के रूप में स्टोर करने जा रहे हैं।

स्ट्रिंग्स

यह एक कुंजी से जुड़े मान का सबसे सरल प्रकार है और कुंजी और मान के बीच एक-से-एक मैपिंग है।

हम SET <key> <value> का उपयोग करके मान सेट कर सकते हैं और GET <key> का उपयोग करके प्राप्त कर सकते हैं।

आप DEL <key> का उपयोग करके कुंजी को हटा भी सकते हैं।

अब, आपको NuGet पैकेज मैनेजर से आवश्यक पैकेज इंस्टॉल करने की आवश्यकता है।

.NET 8 Web API में Redis को प्राथमिक डेटा स्टोर के रूप में उपयोग करना

Program.cs फाइलों में कॉन्फ़िगरेशन जोड़ें

Program.cs

builder.Services.AddSingleton<IConnectionMultiplexer>(options => 
    ConnectionMultiplexer.Connect(("127.0.0.1:6379")));
builder.Services.AddScoped<IStudentRepository, StudentRepository>();

एक Models फोल्डर बनाएं और हमारे मॉडल Student.cs के लिए एक फाइल बनाएं फिर कोड पेस्ट करें।

Student.cs

namespace StudentAPIWithRedisDB.Models
{
    public class Student
    {
        public string Id { get; set; } = $"student:{Guid.NewGuid().ToString()}";
        public required string StudentName { get; set; } = string.Empty;
    }
}

फिर संबंधित फाइलों पर नीचे दिया गया कोड कॉपी और पेस्ट करें।

IStudentRepository.cs

using StudentAPIWithRedisDB.Models;
namespace StudentAPIWithRedisDB.Data
{
    public interface IStudentRepository
    {
        IEnumerable<Student> GetAllStudents();
        Student? GetStudentById(string id);
        void AddStudent(Student student);
        Student? UpdateStudent(Student student);
        Student? DeleteStudent(string id);
    }
}

StudentRepository.cs IStudentRepository.cs इंटरफेस और इसके सभी मेथड्स का कार्यान्वयन है।

using StackExchange.Redis;
using StudentAPIWithRedisDB.Models;
using System.Text.Json;
namespace StudentAPIWithRedisDB.Data
{
    public class StudentRepository : IStudentRepository
    {
        private readonly IConnectionMultiplexer _redis;
        public StudentRepository(IConnectionMultiplexer redis)
        {
            _redis = redis;
        }
        
        public void AddStudent(Student student)
        {
            if(student == null)
            {
                throw new ArgumentOutOfRangeException(nameof(student));
            }
            var db = _redis.GetDatabase();
            var serializedStudent = JsonSerializer.Serialize(student);
            db.StringSet(student.Id, serializedStudent);
        }
        
        public Student? DeleteStudent(string id)
        {
            var db = _redis.GetDatabase();
            var student = db.StringGet(id);
            if (student.IsNullOrEmpty)
            {
                return null;
            }
            db.KeyDelete(id);
            return JsonSerializer.Deserialize<Student>(student);
        }
        
        public IEnumerable<Student> GetAllStudents()
        {
            var db = _redis.GetDatabase();
            var studentKeys = db.Multiplexer.GetServer(_redis.GetEndPoints().First()).Keys(pattern: "student:*");
            var students = new List<Student>();
            foreach (var key in studentKeys)
            {
                var studentJson = db.StringGet(key);
                if (!studentJson.IsNullOrEmpty)
                {
                    var student = JsonSerializer.Deserialize<Student>(studentJson);
                    students.Add(student);
                }
            }
            return students;
        }
        
        public Student? GetStudentById(string id)
        {
            var db = _redis.GetDatabase();
            var student = db.StringGet(id);
            if(student.IsNullOrEmpty)
            {
                return null;
            }
            return JsonSerializer.Deserialize<Student>(student);
        }
        
        public Student UpdateStudent(Student student)
        {
            var db = _redis.GetDatabase();
            var id = student.Id;
            if (db.KeyExists(id))
            {
                var updatedStudentJson = JsonSerializer.Serialize(student);
                db.StringSet(id, updatedStudentJson);
                return student;
            }
            else
            {
                return null;
            }
        }
    }
}

StudentsController.cs

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using StudentAPIWithRedisDB.Data;
using StudentAPIWithRedisDB.Models;
namespace StudentAPIWithRedisDB.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class StudentsController : ControllerBase
    {
        private readonly IStudentRepository _studentRepository;
        public StudentsController(IStudentRepository studentRepository)
        {
            _studentRepository = studentRepository;
        }
        
        [HttpGet("{Id}", Name = "GetStudentById")]
        public ActionResult<Student> GetStudentById(string Id)
        {
            var student = _studentRepository.GetStudentById(Id);
            if(student == null)
            {
                return NotFound();
            }
            return Ok(student);
        }
        
        [HttpPost]
        public ActionResult<Student> AddStudent(Student student)
        {
            _studentRepository.AddStudent(student);
            return CreatedAtRoute(nameof(GetStudentById), new { Id = student.Id }, student);
        }
        
        [HttpGet(Name = "GetAllStudents")]
        public ActionResult<Student> GetAllStudents()
        {
            var students = _studentRepository.GetAllStudents();
            return Ok(students);
        }
        
        [HttpDelete("{id}")]
        public ActionResult<Student> DeleteStudent(string id)
        {
            var student = _studentRepository.DeleteStudent(id);
            if(student == null)
            {
                return NotFound();
            }
            return Ok(student);
        }
        
        [HttpPatch]
        public ActionResult<Student> UpdateStudent(Student student)
        {
            var studentToUpdate = _studentRepository.GetStudentById(student.Id);
            if(studentToUpdate == null)
            {
                return NotFound();
            }
            _studentRepository.UpdateStudent(student);
            return NoContent();
        }
    }
}

अब, एप्लिकेशन चलाएं, आप Swagger का उपयोग करके ब्राउज़र पर एंडपॉइंट्स देख पाएंगे।

.NET 8 Web API में Redis को प्राथमिक डेटा स्टोर के रूप में उपयोग करना

साथ ही, डेटा देखने के लिए Redis Desktop Manager खोलना मददगार होगा। प्रारंभ में, इसमें बिना किसी डेटा के 16 डेटाबेस होंगे।

एक बार जब आप क्रिएट एंडपॉइंट हिट करते हैं, तो यह स्वचालित रूप से DB0 में एक रिकॉर्ड बनाएगा।

CREATE

आसान परीक्षण उद्देश्यों के लिए, मैंने एंडपॉइंट्स का परीक्षण करने के लिए Postman का उपयोग किया है।

केवल नाम पास करें, फिर यह स्वचालित रूप से नई Guid के साथ छात्र के नाम के सफिक्स के साथ एक ID बनाएगा।

और डॉक्यूमेंट DB0 पर बनाया गया है।

GetStudentById

इसके लिए, आपको डॉक्यूमेंट से ID कॉपी करना होगा। फिर इसे अनुरोध URL पर पास करें।

और यह ID के आधार पर मान वापस करता है।

GetAllStudents

यह डेटाबेस में उपलब्ध सभी डॉक्यूमेंट्स वापस करता है।

Update

आपको ID और अपडेटेड मान पास करने की आवश्यकता है। ताकि, यह ID के आधार पर अपडेट करे।

एक बार, जब आप मैनेजर को रीफ्रेश करते हैं तो आप अपडेटेड मान देखेंगे।

Delete

एक उपयोगकर्ता को हटाने के लिए, कृपया ID पास करें, फिर यह छात्र DB से डॉक्यूमेंट को हटा देगा।

और डॉक्यूमेंट फाइल से हटा दिया गया है।

पहले, मेरे पास छात्रों की टेबल पर दो डॉक्यूमेंट्स थे लेकिन अब पहला हटा दिया गया है।

यह हमारे एप्लिकेशन में Redis को डेटाबेस के रूप में उपयोग करने का एक सरल तरीका है। यहां, हमने कैश को कम किया और डेटा को सीधे Redis में स्टोर किया और इसमें परिवर्तन भी किए और पुनः प्राप्त किया। इसी तरह, आप इसे अपने एप्लिकेशन पर भी लागू कर सकते हैं।

  1. JavaScript में स्पैन टैग से कीमत मान प्राप्त करना और गुणा करके डिव में जोड़ना JavaScript में स्पैन टैग से कीमत मान प्राप्त करना और गुणा करके डिव में जोड़ना

    स्पैन टैग से कीमत मान प्राप्त करने के लिए मान निकालें और इसे स्ट्रिंग से पूर्णांक में बदलें।उदाहरणकोड निम्न है:<!DOCTYPE html> <html lang=en> <head>    <meta charset=UTF-8>    <meta name=viewport content=width=device-width, initial-scale=1.0>  

  1. iOS एप्लिकेशन से ऐप स्टोर कैसे लॉन्च करें iOS एप्लिकेशन से ऐप स्टोर कैसे लॉन्च करें

    इस पोस्ट में हम सीखेंगे कि iOS एप्लिकेशन से ऐप स्टोर कैसे खोलें। इस उदाहरण में हम ऐप स्टोर खोलेंगे और स्टोर पर Facebook ऐप दिखाएंगे। आप अपनी ऐप की ID बदलकर अपनी ऐप खोल सकते हैं। चरण 1: नया Xcode प्रोजेक्ट बनाएं Xcode खोलें → New Project → Single View Application → नाम OpenAppStore रखें। चरण 2: स

  1. HTML DOM Style cssFloat प्रॉपर्टी HTML DOM Style cssFloat प्रॉपर्टी

    HTML DOM cssFloat प्रॉपर्टी का उपयोग किसी तत्व के क्षैतिज संरेखण (horizontal alignment) को सेट या प्राप्त करने के लिए किया जाता है। आप तत्व को बाएं या दाएं फ्लोट कर सकते हैं:सिंटैक्स निम्नलिखित है:cssFloat प्रॉपर्टी सेट करना:object.style.cssFloat = left|right|none|initial|inheritउपरोक्त प्रॉपर्टी मा