C# enthusiast. NET foundation member
آموزش Caching با استفاده از Redis در ASP Net Core
در این مقاله قصد داریم به بررسی دیتابیس Redis و Cache کردن داده در آن به وسیله ASP Net Core بپردازیم
در این مقاله از Github Gist استفاده شده است و لود شدن بخش مربوط به کد ها ممکن است کمی زمانبر باشد. همچنین ممکن است که نیازمند نرم افزار رفع تحریم باشید
آشنایی با Redis
ردیس یک دیتابیس NoSQL می باشد که از قانون ACID به صورت کامل پیروی نمی کند. یعنی داده در آن Durable نیست و ممکن است که در صورت قطعی برق یا System Crash داده موجود در آن از بین برود(هرچند که با اعمال تنظیماتی میتوان بوسیله آن هرچند ثانیه یکبار داده را روی دیسک ذخیره کرد). Redis داده را به صورت Key/Value ذخیره میکند و به علت سرعت بسیار خوب گزینه مناسبی برای Cache کردن داده و استفاده از آن به صورت متوالی می باشد.
راه اندازی Redis در محیط ویندوز
بهترین گزینه برای راه اندازی Redis در محیط ویندوز استفاده از داکر می باشد. در cmd دستور زیر را برای نصب ایمیج Redis اجرا میکنیم. دقت داشته باشید که برای استفاده از Docker نیازمند نرم افزار رفع تحریم هستید.
docker pull redis
پس از مدتی، Image مربوط به Redis دانلود و نصب می شود.
ساخت Container برای Redis
پس از دانلود و نصب Image مربوط به Redis ، برای استفاده از آن باید اقدام به ایجاد Container بکنیم. نکته مهم هنگام ایجاد Container ، ایجاد پسوورد برای آن است که یک نکته امنیتی مهم محسوب میشود.
دستور زیر را در محیط cmd اجرا میکنیم.
docker run -p 9191:6379 -d --name RedisCache redis --requirepass "123456"
در اینجا یک Container از Redis با پورت 9191 و نام RedisCache می سازیم و پسوورد 123456 را برای آن تنظیم میکنیم.
سپس دستور زیر را در محیط cmd اجرا میکنیم تا کانتینر ساخته شده شروع به کار کند
docker start RedisCache
برای تست Redis میتوان با دستور زیر به cli در Redis دسترسی پیدا کرد.
docker exec -it RedisCache redis-cli
دقت کنید که RedisCache نام کانتینر ساخته شده می باشد.
سپس با استفاده از دستور زیر در Redis پسووردی که برای آن تنظیم کرده ایم را وارد میکنیم
auth 123456
در اینجا ما پسوورد 123456 را برای Redis ست کردیم.
با استفاده از دستور زیر میتوانیم از صحت کارکرد Redis مطمئن شویم
ping
اگر در جواب PONG دریافت کردیم یعنی همه چیز به درستی تنظیم شده است.
هم اکنون همه چیز برای استفاده از Redis در ASP Net Core آماده است.
استفاده از Redis در ASP Net Core
پس از ایجاد پروژه نمونه ASP Net Core ، اقدام به نصب پکیج StackExchange.Redis میکنیم.
برای نصب این پکیج، از طریق Package Manager Console دستور زیر را اجرا میکنیم.
Install-Package Microsoft.Extensions.Caching.StackExchangeRedis -Version 5.0.1
برای استفاده از Redis در ASP Net Core نیاز است که تنظیمات زیر را در Startup و در قسمت ConfigureServices اعمال کنیم.
در قسمت Configuration کانکشن Redis و همچنین پسووردی که برای آن تنظیم کرده ایم را قرار میدهیم. قسمت InstanceName بیان میکند که با چه کلید واژه ای قرار است که Value های مربوط به Redis ساخته شوند و در واقع نام پیشوند برای Key های داده هایی که قرار است در Redis ذخیره شوند را تنظیم میکند که آن را خالی میگذاریم و کلید ها را خودمان می سازیم.
ساخت مدل پروژه
در مسیر پروژه یک پوشه با نام Model ایجاد میکنیم و در آن یک کلاس با نام Book ایجاد میکنیم.
کلاس Book را به شکل زیر می سازیم.
سپس به سراغ ساخت BookController می رویم و یک API Controller به شکل زیر می سازیم.
ذخیره سازی داخل Redis Cache
برای دسترسی به Redis نیاز به یک Instance از IDistrubtedCache داریم که آن را در کنترلر Inject میکنیم.
برای ذخیره سازی یک نمونه Book در Redis یک اکشن با نام CreateBook می سازیم. دقت داشته باشید که Value ذخیره شده در Redis باید به صورت Byte Array باشد.
در قسمت بالا و در Entry Options برای Expire شدن Cache آن را به صورت Sliding تنظیم کردیم که با هربار دسترسی به Cache مدت زمان Expiration آن تمدید شود و یک روز به Expiration Duration آن اضافه شود.
سپس این اکشن را به وسیله Swagger تست میکنیم.
گرفتن تمامی Book ها از Redis
برای گرفتن تمامی Instance های ساخته شده و ذخیره شده در Redis نیاز است که ابتدا تمامی کلید های ذخیره شده در Redis را لیست کنیم. برای این کار نیاز به یک Instance از Connection Multiplexer داریم. یکی از Best Practice ها هنگام استفاده از Redis آن است که این Instance در سیستم به صورت Singleton رجیستر شود. پس آن را به صورت زیر در سیستم رجیستر میکنیم.
حال Constructor کنترلر را به صورت زیر آپدیت میکنیم
سپس با استفاده از پترن زیر تمام کلید های موجود در Redis که با Book_ شروع میشوند را لیست میکنیم و مقادیر آن را deserialize کرده و در لیست میریزیم.
سپس این اکشن را بوسیله Swagger تست میکنیم.
گرفتن یک Book از Redis
در قسمت قبل یک Instance از Book را با کلید ISBN آن در Redis ذخیره کردیم. حال به وسیله همین کلید همان Instance را بازیابی میکنیم.
سپس بوسیله Swagger این اکشن را تست میکنیم.
حذف یک Book از Redis
برای حذف یک Instance از Book از متد RemoveAsync به صورت زیر عمل میکنیم و به آن کلیدی که برای هر Book تعریف کرده ایم را پاس میدهیم.
سپس این اکشن را به وسیله Swagger تست میکنیم
سپس مجدد تمام Book ها را واکشی میکنیم. مشاهده میشود که Book مورد نظر با موفقیت پاک شده است
نتیجه گیری
در این مقاله به طور اجمالی با caching در Redis آشنا شدیم. به طور کلی Distributed Caching می تواند در مقیاس بالا به افزایش پرفرمنس کمک کند و یکی از ابزار های بسیار کاربردی آن Redis می باشد. اگر به کد های این مقاله نیاز داشتید میتوانید آن را از لینک زیر دریافت کنید. همچنین خوشحال میشوم که نظرات خود را در رابطه با این مقاله مطرح کنید.
مقالات بیشتر در دات نت زوم
مطلبی دیگر از این انتشارات
آموزش Microservices در ASP.NET Core (سری دوم)
مطلبی دیگر از این انتشارات
اشتباهات رایج در استفاده از Async/Await + راه حل
مطلبی دیگر از این انتشارات
C# 9.0: init-only - ایجاد خصوصیات تغییر ناپذیر بدون سازنده