কম্পিউটার টিউটোরিয়াল

.NET 6 ওয়েব API এর সাথে Azure Redis ক্যাশে বাস্তবায়ন করা:একটি ধাপে ধাপে নির্দেশিকা

এই নিবন্ধটি Azure Redis Cache বেসিক এবং .NET Core Web API ব্যবহার করে তাদের বাস্তবায়ন নিয়ে আলোচনা করে।

এজেন্ডা

  • পরিচয়
  • ক্যাশে কি?
  • ক্যাশের প্রকারগুলি
  • রেডিস ক্যাশে
  • Azure Redis ক্যাশে সেটআপ
  • ধাপে ধাপে বাস্তবায়ন

পূর্বশর্ত

  • ভিজ্যুয়াল স্টুডিও 2022
  • Azure অ্যাকাউন্ট
  • .NET কোর 6

পরিচয়

সফ্টওয়্যার শিল্পে ক্যাশিং আজকাল খুব জনপ্রিয় কারণ এটি অ্যাপ্লিকেশনটির কর্মক্ষমতা এবং স্কেলেবিলিটি উন্নত করবে। আমরা Gmail এবং Facebook এর মত অনেক ওয়েব অ্যাপ্লিকেশন ব্যবহার করি এবং দেখি তারা কতটা প্রতিক্রিয়াশীল এবং আমাদের একটি দুর্দান্ত ব্যবহারকারীর অভিজ্ঞতা রয়েছে। ইন্টারনেট ব্যবহার করে অনেক ব্যবহারকারী আছে এবং যদি একটি অ্যাপ্লিকেশনের বিশাল নেটওয়ার্ক ট্রাফিক এবং চাহিদা থাকে, তাহলে আমাদের অনেক কিছুর যত্ন নিতে হবে যা আমাদের অ্যাপ্লিকেশনটির কার্যকারিতা এবং প্রতিক্রিয়াশীলতা উন্নত করতে সাহায্য করে। তাই, এর কারণে, ক্যাশিংয়ের সমাধান রয়েছে এবং সেই কারণেই ক্যাশিং ছবিতে আসে৷

ক্যাশে কি?

ক্যাশে হল মেমরি স্টোরেজ যা অস্থায়ী সঞ্চয়স্থানে ঘন ঘন অ্যাক্সেস ডেটা সংরক্ষণ করতে ব্যবহৃত হয়, এটি কার্যকারিতাকে ব্যাপকভাবে উন্নত করবে এবং অপ্রয়োজনীয় ডেটাবেস আঘাত এড়াবে এবং ঘন ঘন ব্যবহৃত ডেটা ক্যাশে সংরক্ষণ করবে।

.NET 6 ওয়েব API এর সাথে Azure Redis ক্যাশে বাস্তবায়ন করা:একটি ধাপে ধাপে নির্দেশিকা

.NET 6 ওয়েব API এর সাথে Azure Redis ক্যাশে বাস্তবায়ন করা:একটি ধাপে ধাপে নির্দেশিকা

আপনি উপরের চিত্রটিতে দুটি দৃশ্যকল্প দেখতে পাচ্ছেন, একটি ক্যাশে ব্যবহার না করে এবং অন্যটি ক্যাশে সহ। সুতরাং এখানে যখন আমরা ক্যাশে ব্যবহার করি না, সেই ক্ষেত্রে, ধরুন ব্যবহারকারীরা ডেটা চান তখন তারা প্রতিবার ডাটাবেসে আঘাত করবে এবং এটি সময়ের জটিলতা বাড়াবে এবং কর্মক্ষমতা হ্রাস করবে যদি কিছু স্ট্যাটিক ডেটা থাকে যা ব্যবহারকারীরা চান এবং এটি সমস্ত ব্যবহারকারীর জন্য একই। যখন আমরা ক্যাশে ব্যবহার করি না, তখন প্রত্যেকে ডেটা আনার জন্য অপ্রয়োজনীয় ডাটাবেসে আঘাত করে। ওপারে। আপনি দেখতে পাচ্ছেন আমরা ক্যাশে ব্যবহার করি, এবং সেক্ষেত্রে, যদি সমস্ত ব্যবহারকারীর জন্য একই স্ট্যাটিক এবং একই ডেটা থাকে তবে শুধুমাত্র প্রথম ব্যবহারকারী ডাটাবেসে আঘাত করবে এবং ডেটা আনবে এবং ক্যাশে মেমরিতে সংরক্ষণ করবে, এবং তারপরে অন্য দুই ব্যবহারকারী ডেটা আনার জন্য ডাটাবেসকে অপ্রয়োজনীয়ভাবে হিট না করে ক্যাশে থেকে এটি ব্যবহার করেছে।

ক্যাশের প্রকারগুলি

মূলত, দুই ধরনের ক্যাশিং আছে .NET কোর সমর্থন করে

  1. ইন-মেমরি ক্যাশিং
  2. ডিস্ট্রিবিউটেড ক্যাশিং

যখন আমরা ইন-মেমরি ক্যাশে ব্যবহার করি, তখন অ্যাপ্লিকেশন সার্ভার মেমরিতে ডেটা সংরক্ষণ করা হয়; যখনই আমাদের এটির প্রয়োজন হয়, আমরা সেখান থেকে ডেটা নিয়ে আসি এবং যেখানেই প্রয়োজন সেখানে ব্যবহার করি। এবং ডিস্ট্রিবিউটেড ক্যাশিং-এ রেডিস এবং আরও অনেকের মতো অনেকগুলি তৃতীয় পক্ষের প্রক্রিয়া রয়েছে। কিন্তু এই বিভাগে, আমরা Redis ক্যাশে বিস্তারিতভাবে দেখি এবং এটি কিভাবে .NET কোরে কাজ করে

ডিস্ট্রিবিউটেড ক্যাশিং

.NET 6 ওয়েব API এর সাথে Azure Redis ক্যাশে বাস্তবায়ন করা:একটি ধাপে ধাপে নির্দেশিকা

  • মূলত, বিতরণ করা ক্যাশিং ডেটা সংরক্ষণ করা হয় এবং একাধিক সার্ভারের মধ্যে ভাগ করা হয়
  • এছাড়া, যখন আমরা একটি মাল্টি-টেন্যান্ট অ্যাপ্লিকেশন ব্যবহার করি তখন একাধিক সার্ভারের মধ্যে লোড পরিচালনা করার পরে অ্যাপ্লিকেশনটির স্কেলেবিলিটি এবং কর্মক্ষমতা উন্নত করা সহজ হয়
  • ধরুন, ভবিষ্যতে যদি একটি সার্ভার ক্র্যাশ হয়ে পুনরায় চালু হয় তাহলে অ্যাপ্লিকেশনটির কোনো প্রভাব পড়বে না কারণ আমরা চাইলে একাধিক সার্ভার আমাদের প্রয়োজন অনুযায়ী আছে

রেডিস হল সবচেয়ে জনপ্রিয় ক্যাশে যা আজকাল অনেক কোম্পানি ব্যবহার করে অ্যাপ্লিকেশানের কর্মক্ষমতা এবং স্কেলেবিলিটি উন্নত করতে। তাই, আমরা একে একে রেডিস এবং এর ব্যবহার নিয়ে আলোচনা করতে যাচ্ছি।

রিডিস ক্যাশে

  • রেডিস একটি ওপেন সোর্স (বিএসডি লাইসেন্সপ্রাপ্ত) ইন-মেমরি ডেটা স্ট্রাকচার স্টোর একটি ডাটাবেস হিসাবে ব্যবহৃত হয়৷
  • মূলত, এটি প্রায়শই ব্যবহৃত এবং কিছু স্ট্যাটিক ডেটা ক্যাশের ভিতরে সংরক্ষণ করতে এবং ব্যবহারকারীর প্রয়োজন অনুসারে ব্যবহার ও সংরক্ষণ করতে ব্যবহৃত হয়।
  • Redis-এ উপস্থিত অনেক ডেটা স্ট্রাকচার আছে যেগুলো আমরা ডাটা সংরক্ষণ করতে List, Set, Hashing, Stream এবং আরও অনেক কিছু ব্যবহার করতে পারি।

Azure Redis ক্যাশে সেটআপ

ধাপ 1

Azure পোর্টালে লগ ইন করুন।

ধাপ 2

বাজারে রেডিসের জন্য Azure ক্যাশে অনুসন্ধান করুন এবং এটি খুলুন।

.NET 6 ওয়েব API এর সাথে Azure Redis ক্যাশে বাস্তবায়ন করা:একটি ধাপে ধাপে নির্দেশিকা

ধাপ 3

তৈরি করুন এ ক্লিক করুন এবং অন্যান্য তথ্য প্রদান করুন।

.NET 6 ওয়েব API এর সাথে Azure Redis ক্যাশে বাস্তবায়ন করা:একটি ধাপে ধাপে নির্দেশিকা

.NET 6 ওয়েব API এর সাথে Azure Redis ক্যাশে বাস্তবায়ন করা:একটি ধাপে ধাপে নির্দেশিকা

.NET 6 ওয়েব API এর সাথে Azure Redis ক্যাশে বাস্তবায়ন করা:একটি ধাপে ধাপে নির্দেশিকা

.NET 6 ওয়েব API এর সাথে Azure Redis ক্যাশে বাস্তবায়ন করা:একটি ধাপে ধাপে নির্দেশিকা

পদক্ষেপ 4

এর পরে ক্যাশের ভিতরে অ্যাক্সেস কী বিভাগে যান যা আমরা আগে তৈরি করেছি এবং .NET কোর ওয়েব API-এর ভিতরে আমাদের প্রয়োজনীয় প্রাথমিক সংযোগ স্ট্রিংটি অনুলিপি করি৷

.NET 6 ওয়েব API এর সাথে Azure Redis ক্যাশে বাস্তবায়ন করা:একটি ধাপে ধাপে নির্দেশিকা

ধাপে ধাপে বাস্তবায়ন

ধাপ 1

ভিজ্যুয়াল স্টুডিও খুলুন এবং একটি নতুন .NET কোর ওয়েব API প্রকল্প তৈরি করুন৷

.NET 6 ওয়েব API এর সাথে Azure Redis ক্যাশে বাস্তবায়ন করা:একটি ধাপে ধাপে নির্দেশিকা

ধাপ 2

একটি নতুন প্রকল্প কনফিগার করুন৷

.NET 6 ওয়েব API এর সাথে Azure Redis ক্যাশে বাস্তবায়ন করা:একটি ধাপে ধাপে নির্দেশিকা

ধাপ 3

অতিরিক্ত বিবরণ প্রদান করুন।

.NET 6 ওয়েব API এর সাথে Azure Redis ক্যাশে বাস্তবায়ন করা:একটি ধাপে ধাপে নির্দেশিকা

পদক্ষেপ 4

প্রকল্পের কাঠামো।

.NET 6 ওয়েব API এর সাথে Azure Redis ক্যাশে বাস্তবায়ন করা:একটি ধাপে ধাপে নির্দেশিকা

ধাপ 5

পণ্যের বিবরণ ক্লাস তৈরি করুন।

namespace AzureRedisCacheDemo.Models {
 public class ProductDetails {
 public int Id {
 get;
 set;
 }
 public string ProductName {
 get;
 set;
 }
 public string ProductDescription {
 get;
 set;
 }
 public int ProductPrice {
 get;
 set;
 }
 public int ProductStock {
 get;
 set;
 }
 }
}

ধাপ 6

এরপর, ডেটা ফোল্ডারের ভিতরে Db কনটেক্সট ক্লাস যোগ করুন।

using AzureRedisCacheDemo.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Hosting;
namespace AzureRedisCacheDemo.Data {
 public class DbContextClass: DbContext {
 public DbContextClass(DbContextOptions < DbContextClass > options): base(options) {}
 public DbSet < ProductDetails > Products {
 get;
 set;
 }
 }
}

পদক্ষেপ 7

এর পরে, বীজ ডেটা ক্লাস যোগ করুন যা আমরা প্রাথমিকভাবে কিছু ডেটা সন্নিবেশ করতে ব্যবহার করি।

using AzureRedisCacheDemo.Models;
using Microsoft.EntityFrameworkCore;
namespace AzureRedisCacheDemo.Data
{
 public class SeedData
 {
 public static void Initialize(IServiceProvider serviceProvider)
 {
 using (var context = new DbContextClass(
 serviceProvider.GetRequiredService<DbContextOptions<DbContextClass>>()))
 {
 if (context.Products.Any())
 {
 return;
 }
 context.Products.AddRange(
 new ProductDetails
 {
 Id = 1,
 ProductName = "IPhone",
 ProductDescription = "IPhone 14",
 ProductPrice = 120000,
 ProductStock = 100
 },
 new ProductDetails
 {
 Id = 2,
 ProductName = "Samsung TV",
 ProductDescription = "Smart TV",
 ProductPrice = 400000,
 ProductStock = 120
 });
 context.SaveChanges();
 }
 }
 }
}

ধাপ 8

appsettings.json ফাইলের ভিতরে Azure Redis ক্যাশে সংযোগ স্ট্রিং কনফিগার করুন।

{
 "Logging": {
 "LogLevel": {
 "Default": "Information",
 "Microsoft.AspNetCore": "Warning"
 }
 },
 "AllowedHosts": "*",
 "RedisURL": "<valuefromportal>"
}

ধাপ 9

হেল্পার ফোল্ডারের ভিতরে কনফিগারেশন ম্যানেজার এবং কানেকশন হেল্পার ক্লাস তৈরি করুন যা আমরা সংযোগের উদ্দেশ্যে ব্যবহার করি।

কনফিগারেশন ম্যানেজার

namespace AzureRedisCacheDemo.Helper {
 static class ConfigurationManager {
 public static IConfiguration AppSetting {
 get;
 }
 static ConfigurationManager() {
 AppSetting = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json").Build();
 }
 }
}

সংযোগ সহায়ক

using StackExchange.Redis;
namespace AzureRedisCacheDemo.Helper {
 public class ConnectionHelper {
 static ConnectionHelper() {
 ConnectionHelper.lazyConnection = new Lazy < ConnectionMultiplexer > (() => {
 return ConnectionMultiplexer.Connect(ConfigurationManager.AppSetting["RedisURL"]);
 });
 }
 private static Lazy < ConnectionMultiplexer > lazyConnection;
 public static ConnectionMultiplexer Connection {
 get {
 return lazyConnection.Value;
 }
 }
 }
}

পদক্ষেপ 10

এরপর, সংগ্রহস্থলের ভিতরে আইপ্রোডাক্ট সার্ভিস যোগ করুন।

using AzureRedisCacheDemo.Models;
namespace AzureRedisCacheDemo.Repositories {
 public interface IProductService {
 public Task < List < ProductDetails >> ProductListAsync();
 public Task < ProductDetails > GetProductDetailByIdAsync(int productId);
 public Task < bool > AddProductAsync(ProductDetails productDetails);
 public Task < bool > UpdateProductAsync(ProductDetails productDetails);
 public Task < bool > DeleteProductAsync(int productId);
 }
}

ধাপ 11

এরপর, প্রোডাক্টসার্ভিস ক্লাস তৈরি করুন এবং এর ভিতরে আইপ্রোডাক্ট সার্ভিস ইন্টারফেস প্রয়োগ করুন।

using AzureRedisCacheDemo.Data;
using AzureRedisCacheDemo.Models;
using Microsoft.EntityFrameworkCore;
using System.Linq;
namespace AzureRedisCacheDemo.Repositories {
 public class ProductService: IProductService {
 private readonly DbContextClass dbContextClass;
 public ProductService(DbContextClass dbContextClass) {
 this.dbContextClass = dbContextClass;
 }
 public async Task < List < ProductDetails >> ProductListAsync() {
 return await dbContextClass.Products.ToListAsync();
 }
 public async Task < ProductDetails > GetProductDetailByIdAsync(int productId) {
 return await dbContextClass.Products.Where(ele => ele.Id == productId).FirstOrDefaultAsync();
 }
 public async Task < bool > AddProductAsync(ProductDetails productDetails) {
 await dbContextClass.Products.AddAsync(productDetails);
 var result = await dbContextClass.SaveChangesAsync();
 if (result > 0) {
 return true;
 } else {
 return false;
 }
 }
 public async Task < bool > UpdateProductAsync(ProductDetails productDetails) {
 var isProduct = ProductDetailsExists(productDetails.Id);
 if (isProduct) {
 dbContextClass.Products.Update(productDetails);
 var result = await dbContextClass.SaveChangesAsync();
 if (result > 0) {
 return true;
 } else {
 return false;
 }
 }
 return false;
 }
 public async Task < bool > DeleteProductAsync(int productId) {
 var findProductData = dbContextClass.Products.Where(_ => _.Id == productId).FirstOrDefault();
 if (findProductData != null) {
 dbContextClass.Products.Remove(findProductData);
 var result = await dbContextClass.SaveChangesAsync();
 if (result > 0) {
 return true;
 } else {
 return false;
 }
 }
 return false;
 }
 private bool ProductDetailsExists(int productId) {
 return dbContextClass.Products.Any(e => e.Id == productId);
 }
 }
}

ধাপ 12

একটি IRedisCache ইন্টারফেস তৈরি করুন।

namespace AzureRedisCacheDemo.Repositories.AzureRedisCache {
 public interface IRedisCache {
 T GetCacheData < T > (string key);
 bool SetCacheData < T > (string key, T value, DateTimeOffset expirationTime);
 object RemoveData(string key);
 }
}

পদক্ষেপ 13

এর পরে, একটি RedisCache ক্লাস তৈরি করুন এবং আমরা আগে যেটি তৈরি করেছি তার ভিতরে ইন্টারফেস পদ্ধতি প্রয়োগ করুন৷

using AzureRedisCacheDemo.Helper;
using Newtonsoft.Json;
using StackExchange.Redis;
namespace AzureRedisCacheDemo.Repositories.AzureRedisCache
{
 public class RedisCache : IRedisCache
 {
 private IDatabase _db;
 public RedisCache()
 {
 ConfigureRedis();
 }
 private void ConfigureRedis()
 {
 _db = ConnectionHelper.Connection.GetDatabase();
 }
 public T GetCacheData<T>(string key)
 {
 var value = _db.StringGet(key);
 if (!string.IsNullOrEmpty(value))
 {
 return JsonConvert.DeserializeObject<T>(value);
 }
 return default;
 }
 public object RemoveData(string key)
 {
 bool _isKeyExist = _db.KeyExists(key);
 if (_isKeyExist == true)
 {
 return _db.KeyDelete(key);
 }
 return false;
 }
 public bool SetCacheData<T>(string key, T value, DateTimeOffset expirationTime)
 {
 TimeSpan expiryTime = expirationTime.DateTime.Subtract(DateTime.Now);
 var isSet = _db.StringSet(key, JsonConvert.SerializeObject(value), expiryTime);
 return isSet;
 }
 }
}

পদক্ষেপ 14

একটি নতুন পণ্য নিয়ন্ত্রক তৈরি করুন৷

using AzureRedisCacheDemo.Models;
using AzureRedisCacheDemo.Repositories;
using AzureRedisCacheDemo.Repositories.AzureRedisCache;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
namespace AzureRedisCacheDemo.Controllers
{
 [Route("api/[controller]")]
 [ApiController]
 public class ProductsController : ControllerBase
 {
 private readonly IProductService _productService;
 private readonly IRedisCache _redisCache;
 public ProductsController(IProductService productService, IRedisCache redisCache)
 {
 _productService = productService;
 _redisCache = redisCache;
 }
 /// <summary>
 /// Product List
 /// </summary>
 /// <returns></returns>
 [HttpGet]
 public async Task<ActionResult<List<ProductDetails>>> ProductListAsync()
 {
 var cacheData = _redisCache.GetCacheData<List<ProductDetails>>("product");
 if (cacheData != null)
 {
 return new List<ProductDetails>(cacheData);
 }
 var productList = await _productService.ProductListAsync();
 if(productList != null)
 {
 var expirationTime = DateTimeOffset.Now.AddMinutes(5.0);
 _redisCache.SetCacheData<List<ProductDetails>>("product", productList, expirationTime);
 return Ok(productList);
 }
 else
 {
 return NoContent();
 }
 }
 /// <summary>
 /// Get Product By Id
 /// </summary>
 /// <param name="productId"></param>
 /// <returns></returns>
 [HttpGet("{productId}")]
 public async Task<ActionResult<ProductDetails>> GetProductDetailsByIdAsync(int productId)
 {
 var cacheData = _redisCache.GetCacheData<List<ProductDetails>>("product");
 if (cacheData != null)
 {
 ProductDetails filteredData = cacheData.Where(x => x.Id == productId).FirstOrDefault();
 return new ActionResult<ProductDetails>(filteredData);
 }
 var productDetails = await _productService.GetProductDetailByIdAsync(productId);
 if(productDetails != null)
 {
 return Ok(productDetails);
 }
 else
 {
 return NotFound();
 }
 }
 /// <summary>
 /// Add a new product
 /// </summary>
 /// <param name="productDetails"></param>
 /// <returns></returns>
 [HttpPost]
 public async Task<IActionResult> AddProductAsync(ProductDetails productDetails)
 {
 var isProductInserted = await _productService.AddProductAsync(productDetails);
 _redisCache.RemoveData("product");
 if (isProductInserted)
 {
 return Ok(isProductInserted);
 }
 else
 {
 return BadRequest();
 }
 }
 /// <summary>
 /// Update product details
 /// </summary>
 /// <param name="productDetails"></param>
 /// <returns></returns>
 [HttpPut]
 public async Task<IActionResult> UpdateProductAsync(ProductDetails productDetails)
 {
 var isProductUpdated = await _productService.UpdateProductAsync(productDetails);
 _redisCache.RemoveData("product");
 if (isProductUpdated)
 {
 return Ok(isProductUpdated);
 }
 else
 {
 return BadRequest();
 }
 }
 /// <summary>
 /// Delete product by id
 /// </summary>
 /// <param name="productId"></param>
 /// <returns></returns>
 [HttpDelete]
 public async Task<IActionResult> DeleteProductAsync(int productId)
 {
 var isProductDeleted = await _productService.DeleteProductAsync(productId);
 _redisCache.RemoveData("product");
 if (isProductDeleted)
 {
 return Ok(isProductDeleted);
 }
 else
 {
 return BadRequest();
 }
 }
 }
}

পদক্ষেপ 15

প্রোগ্রাম ক্লাসের মধ্যে কয়েকটি পরিষেবা নিবন্ধন করুন।

using AzureRedisCacheDemo.Data;
using AzureRedisCacheDemo.Models;
using AzureRedisCacheDemo.Repositories;
using AzureRedisCacheDemo.Repositories.AzureRedisCache;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Hosting;
using System;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddScoped < IProductService, ProductService > ();
builder.Services.AddDbContext < DbContextClass > (o => o.UseInMemoryDatabase("RedisCacheDemo"));
builder.Services.AddScoped < IRedisCache, RedisCache > ();
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
using(var scope = app.Services.CreateScope()) {
 var services = scope.ServiceProvider;
 var context = services.GetRequiredService < DbContextClass > ();
 SeedData.Initialize(services);
}
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment()) {
 app.UseSwagger();
 app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

পদক্ষেপ 16

অবশেষে, অ্যাপ্লিকেশনটি চালান এবং আমরা আমাদের API এর শেষ পয়েন্টগুলির সাথে swagger UI দেখতে পারি৷

.NET 6 ওয়েব API এর সাথে Azure Redis ক্যাশে বাস্তবায়ন করা:একটি ধাপে ধাপে নির্দেশিকা

ধাপ 17

প্রোডাক্টের এন্ডপয়েন্ট গেট টিপুন এবং Azure পোর্টালের ভিতরে Redis CLI খুলুন এবং সেখানে আপনি দেখতে পাবেন যে যখন আমরা প্রথমবার এন্ডপয়েন্টে পৌঁছব তখন প্রোডাক্ট লিস্ট জমা হয়ে যাবে।

.NET 6 ওয়েব API এর সাথে Azure Redis ক্যাশে বাস্তবায়ন করা:একটি ধাপে ধাপে নির্দেশিকা

এই ক্ষেত্রে, প্রথমে, আমরা পরীক্ষা করি যে ডেটা ক্যাশে উপস্থিত আছে কি না। যদি না হয় তবে আমরা ডাটাবেস থেকে ডেটা পাই এবং ক্যাশেও সংরক্ষণ করি। আমরা ইতিমধ্যেই কন্ট্রোলারের ভিতরে এটি সম্পর্কিত কোড লিখি। সুতরাং, পরের বার আমরা ক্যাশে থেকে ডেটা পাব। আপনি যদি কন্ট্রোলারের ভিতরে একটি ডিবাগার রাখেন তাহলে আপনি সহজেই বুঝতে পারবেন যে জিনিসগুলি কীভাবে কাজ করছে৷

GitHub URL

https://github.com/Jaydeep-007/AzureRedisCacheDemo/tree/master/AzureRedisCacheDemo

উপসংহার

এখানে আমরা ক্যাশে পরিচিতি এবং অ্যাজুরে তাদের কনফিগারেশন দেখেছি। এছাড়াও, .NET কোর ওয়েব API ব্যবহার করে ধাপে ধাপে বাস্তবায়ন।


  1. এইচটিএমএল অনলাইন ইভেন্ট অ্যাট্রিবিউট

  2. লিনাক্স chmod রিকার্সিভ:কিভাবে ফাইল পারমিশন রিকারসিভ পরিবর্তন করবেন

  3. CSS-এ অবজেক্ট-ফিট এবং অবজেক্ট-পজিশন সহ ছবি ক্রপ করুন

  4. উপস্থাপন করা হচ্ছে Upstash Redis অনুসন্ধান:আপনার Redis ডেটার জন্য শক্তিশালী, মাপযোগ্য অনুসন্ধান