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

ASP.NET কোর এবং Azure Redis ক্যাশের সাথে ক্যাশে-সাইড প্যাটার্ন বাস্তবায়ন করা

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

পরিচয়

এই প্যাটার্নটি মোটামুটি সহজবোধ্য এবং এর একমাত্র উদ্দেশ্য হল ডেটা উৎস থেকে ক্যাশে চাহিদা অনুযায়ী ডেটা লোড করা। এটি ক্যাশে ডেটা এবং এর অন্তর্নিহিত ডেটা উত্সের মধ্যে সামঞ্জস্য বজায় রাখতে সহায়তা করে৷

প্যাটার্নের বৈশিষ্ট্য নিম্নরূপ।

  • যখন কোনো অ্যাপ্লিকেশনের ডেটার প্রয়োজন হয়, প্রথমে এটি ক্যাশে খতিয়ে দেখবে।
  • যদি ক্যাশে ডেটা উপস্থিত থাকে, তাহলে অ্যাপ্লিকেশনটি ক্যাশে থেকে ডেটা ব্যবহার করবে৷
  • অন্যথায়, ডেটা উৎস থেকে ডেটা পুনরুদ্ধার করা হবে।

নীচের চিত্রগত চিত্র

ASP.NET কোর এবং Azure Redis ক্যাশের সাথে ক্যাশে-সাইড প্যাটার্ন বাস্তবায়ন করা

অ্যাপ্লিকেশন দ্বারা মান পরিবর্তনের পরে ক্যাশে অবজেক্টটিকে অবৈধ করতে হবে।

ASP.NET কোর এবং Azure Redis ক্যাশের সাথে ক্যাশে-সাইড প্যাটার্ন বাস্তবায়ন করা

ক্যাশে অবৈধ করার ক্রম গুরুত্বপূর্ণ। ক্যাশে থেকে আইটেমটি সরানোর আগে ডেটা উত্স আপডেট করুন। যদি, আপনি প্রথমে ক্যাশে থেকে আইটেমটি সরিয়ে ফেলেন, ডেটা স্টোর আপডেট হওয়ার আগে ক্লায়েন্ট আইটেমটি আনতে পারে এমন সম্ভাবনা রয়েছে। এর ফলে ডেটা স্টোর এবং ক্যাশের মধ্যে ডেটা অসঙ্গতি দেখা দেবে।

কখন এই প্যাটার্নটি ব্যবহার করবেন?

  • এই প্যাটার্ন আমাদের চাহিদা অনুযায়ী ডেটা লোড করতে সক্ষম করে এবং যখন সম্পদের চাহিদা অপ্রত্যাশিত হয় তখন ব্যবহার করা যেতে পারে
  • একটি ক্যাশে যা রিড-থ্রু এবং রাইট-থ্রু অপারেশন প্রদান করে না।

দ্রষ্টব্য

  • পড়ুন: এটি একটি ক্যাশে যা ডাটাবেসের সাথে সঙ্গতিপূর্ণ এবং ক্যাশে মিস হলে, এটি ডাটাবেস থেকে ডেটা লোড করতে পারে এবং ক্যাশে পূরণ করতে পারে৷
  • লিখুন-এর মাধ্যমে: ক্যাশে ডাটাবেসের সাথে সঙ্গতিপূর্ণ থাকে এবং ডেটা সর্বদা ক্যাশের মাধ্যমে মূল ডাটাবেসে যায়।

Azure সম্পদ তৈরি করুন

উপরে চিত্রিত হিসাবে, আমাদের ডাটাবেস (Azure SQL সার্ভার) এবং ক্যাশে (Azure Redis Cache) প্রয়োজন। আপনি আপনার সুবিধার ডাটাবেস এবং ক্যাশে চয়ন করতে পারেন৷

$resourceGroup="<Resource Group>"
$location="<location>"
$redisCacheName="<Redis cache name>"
$sqlServerName="<Azure SQL Server Name>"
$sqlDBName="<Azure SQL DB Name>"
$adminName="<admin name of SQL server>"
$adminPassword="<admin password of SQL Server>"
# Creating a resource group
az group create --name $resourceGroup --location $location
# Create Redis Cache with SKU as Basic
az redis create --name $redisCacheName --resource-group $resourceGroup --location $location --sku Basic --vm-size c0
# Create SQL Server
az sql server create -l $location -g $resourceGroup -n $sqlServerName -u $adminName -p $adminPassword
# Create SQL database with SKU as Basic
az sql db create -g $resourceGroup -s $sqlServerName -n $sqlDBName --service-objective Basic

বাস্তবায়ন

আসুন একটি ASP.NET কোর ওয়েব API প্রকল্প তৈরি করে এবং Redis ক্যাশে এবং এন্টিটি ফ্রেমওয়ার্ক কোরের জন্য প্রয়োজনীয় Nuget প্যাকেজ যোগ করার মাধ্যমে বাস্তবায়ন শুরু করি।

dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Tools
dotnet add package Microsoft.Extensions.Caching.StackExchangeRedis

প্রথমত, আসুন একটি কান্ট্রি মডেল ক্লাস তৈরি করি।

public class Country 
{ 
 public int Id { get; set; } 
 public string Name { get; set; } 
 public bool IsActive { get; set; } 
} 

এখন, স্টার্টআপ ক্লাসের ConfigureServices পদ্ধতিতে EF কোর এবং Redis ক্যাশের নির্ভরতা নিবন্ধন করা যাক।

public void ConfigureServices(IServiceCollection services)
{
 services.AddControllers();
 services.AddDbContext<CountryContext>(optionsAction =>
 optionsAction.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
 services.AddStackExchangeRedisCache(setupAction =>
 {
 setupAction.Configuration = Configuration.GetConnectionString("RedisConnectionString");
 });
}

Redis ক্যাশে এবং SQL ডেটাবেসের সংযোগ স্ট্রিংগুলিকে সামঞ্জস্য করতে এখন appsettings.json ফাইলটি পরিবর্তন করুন৷

"ConnectionStrings": {
 "RedisConnectionString": "<Redis Cache ConnectionString>",
 "DefaultConnection": "<SQL Server Connection string>"
}

আসুন DbContext ক্লাস যোগ করি।

public class CountryContext : DbContext
{
 public DbSet<Country> Countries { get; set; }
 public CountryContext(DbContextOptions dbContextOptions) : base(dbContextOptions)
 {
 }
}

GetCountries পদ্ধতি একটি কী ব্যবহার করে ক্যাশে থেকে একটি আইটেম পুনরুদ্ধার করার চেষ্টা করে। যদি মিল পাওয়া যায়, তা ফেরত দেওয়া হয়। অন্যথায়, ডেটাবেস থেকে ডেটা পুনরুদ্ধার করা হবে এবং ক্যাশে পপুলেট করা হবে। ক্যাশ করা আইটেমটি 5 মিনিটের পরে মেয়াদ শেষ হওয়ার জন্য কনফিগার করা হয়েছে৷

[Route("api/[controller]")]
[ApiController]
public class CountryController : ControllerBase
{
 private readonly IDistributedCache cache;
 private readonly CountryContext countryContext;
 public CountryController(IDistributedCache cache, CountryContext countryContext)
 {
 this.cache = cache;
 this.countryContext = countryContext;
 }
 // GET: api/<CountryController>
 [HttpGet]
 public async Task<IEnumerable<Country>> GetCountries()
 {
 var countriesCache = await cache.GetStringAsync("countries");
 var value = (countriesCache == null) ? default : JsonConvert.DeserializeObject<IEnumerable<Country>>(countriesCache);
 if (value == null)
 {
 var countries = countryContext.Countries.ToList();
 if (countries != null && countries.Any())
 {
 await cache.SetStringAsync("Countries", JsonConvert.SerializeObject(countries), new DistributedCacheEntryOptions
 {
 AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5)
 });
 return countries;
 }
 }
 return value;
 }
}

AddCountries পদ্ধতিটি ব্যাখ্যা করে কিভাবে ডাটাবেসে ডেটা যোগ/আপডেট করার সময় ক্যাশে অবৈধ হতে পারে।

// POST api/<CountryController>
[HttpPost]
public async Task<ActionResult<string>> AddCountries([FromBody] Country country, CancellationToken cancellationToken)
{
 if (country == null)
 return BadRequest("country is null");
 await countryContext.AddAsync(country);
 await countryContext.SaveChangesAsync(cancellationToken).ConfigureAwait(false);
 await cache.RemoveAsync("countries", cancellationToken).ConfigureAwait(false);
 return Ok("cache has been invalidated");
}

উপসংহার

এই নিবন্ধে, আমি ASP.NET কোর এবং Azure Redis ক্যাশে ব্যবহার করে ক্যাশে-অ্যাসাইড প্যাটার্ন এবং এর প্রাথমিক বাস্তবায়ন বর্ণনা করেছি। হ্যাপি ক্যাশিং!

আমি আশা করি আপনি নিবন্ধটি পছন্দ করেন. আপনি যদি নিবন্ধটি আকর্ষণীয় মনে করেন তবে দয়া করে লাইক করুন এবং শেয়ার করুন।


  1. পিএইচপি-তে গ্রাফিক্স ড্র (জিডি) ছবিতে কীভাবে গামা সংশোধন প্রয়োগ করবেন?

  2. কিভাবে আমরা জাভাতে JRadioButtons অনুভূমিকভাবে সারিবদ্ধ করতে পারি?

  3. HTML DOM ট্র্যাক srclang সম্পত্তি

  4. পুনরাবৃত্ত ফাংশন ব্যবহার করে সংখ্যার GCD খুঁজে বের করতে C প্রোগ্রাম