परिचय
इस लेख में, मैं 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" पर क्लिक करें और फिर "अगला" पर क्लिक करें।
कॉन्फ़िगर पेज पर, प्रोजेक्ट नाम दर्ज करें और फिर "अगला" दबाएं।

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

अब, हमारे 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 चला सकते हैं।

Redis सर्वर के साथ इंटरैक्ट करने के लिए, आपको कंटेनर ID के साथ नीचे दी गई कमांड चलाने की आवश्यकता है।
docker exec -it <container_id> /bin/sh
Docker का बुनियादी सेटअप हो गया है और हम कमांड लाइन के माध्यम से Redis के साथ इंटरैक्ट कर सकते हैं।
अब, हम स्ट्रिंग डेटा प्रकारों के बारे में अधिक देखेंगे क्योंकि हम कुंजी और मान जोड़ी को स्ट्रिंग्स के रूप में स्टोर करने जा रहे हैं।
स्ट्रिंग्स
यह एक कुंजी से जुड़े मान का सबसे सरल प्रकार है और कुंजी और मान के बीच एक-से-एक मैपिंग है।
हम SET <key> <value> का उपयोग करके मान सेट कर सकते हैं और GET <key> का उपयोग करके प्राप्त कर सकते हैं।
आप DEL <key> का उपयोग करके कुंजी को हटा भी सकते हैं।
अब, आपको NuGet पैकेज मैनेजर से आवश्यक पैकेज इंस्टॉल करने की आवश्यकता है।

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 का उपयोग करके ब्राउज़र पर एंडपॉइंट्स देख पाएंगे।

साथ ही, डेटा देखने के लिए Redis Desktop Manager खोलना मददगार होगा। प्रारंभ में, इसमें बिना किसी डेटा के 16 डेटाबेस होंगे।
एक बार जब आप क्रिएट एंडपॉइंट हिट करते हैं, तो यह स्वचालित रूप से DB0 में एक रिकॉर्ड बनाएगा।
CREATE
आसान परीक्षण उद्देश्यों के लिए, मैंने एंडपॉइंट्स का परीक्षण करने के लिए Postman का उपयोग किया है।
केवल नाम पास करें, फिर यह स्वचालित रूप से नई Guid के साथ छात्र के नाम के सफिक्स के साथ एक ID बनाएगा।
और डॉक्यूमेंट DB0 पर बनाया गया है।
GetStudentById
इसके लिए, आपको डॉक्यूमेंट से ID कॉपी करना होगा। फिर इसे अनुरोध URL पर पास करें।
और यह ID के आधार पर मान वापस करता है।
GetAllStudents
यह डेटाबेस में उपलब्ध सभी डॉक्यूमेंट्स वापस करता है।
Update
आपको ID और अपडेटेड मान पास करने की आवश्यकता है। ताकि, यह ID के आधार पर अपडेट करे।
एक बार, जब आप मैनेजर को रीफ्रेश करते हैं तो आप अपडेटेड मान देखेंगे।
Delete
एक उपयोगकर्ता को हटाने के लिए, कृपया ID पास करें, फिर यह छात्र DB से डॉक्यूमेंट को हटा देगा।
और डॉक्यूमेंट फाइल से हटा दिया गया है।
पहले, मेरे पास छात्रों की टेबल पर दो डॉक्यूमेंट्स थे लेकिन अब पहला हटा दिया गया है।
यह हमारे एप्लिकेशन में Redis को डेटाबेस के रूप में उपयोग करने का एक सरल तरीका है। यहां, हमने कैश को कम किया और डेटा को सीधे Redis में स्टोर किया और इसमें परिवर्तन भी किए और पुनः प्राप्त किया। इसी तरह, आप इसे अपने एप्लिकेशन पर भी लागू कर सकते हैं।