پیاده سازی Caching در Web API
شنبه 24 مهر 1395در این مقاله ما توضیح خواهیم داد که چگونه از caching در web API، برای بهبود عملکرد آن با کاهش زمان response ، استفاده کنیم.
Caching یک تکنیک ذخیره سازی پی در پی است که داده و اطلاعات را در یک حافظه LOCAL برای یک دوره زمانی خاص استفاده میکند.
هنگامی که Client یک درخواست با اطلاعات یکسان میفرستد، به جای بازیابی دوباره اطلاعات از dataBase ،اطلاعات را از حافظه محلی میگیرد.
مزیت اصلی caching این است که عملکرد سیستم را، با کاهش پردازش بار بهبود میبخشد.
در اینجا یک پروژه web API میسازیم. ما یک کنترلر "DataController" و یک اکشن "GetData" داریم همانطور که در زیر مشاهده میکنید :
[AllowAnonymous] [Route("GetData")] public async Task<IHttpActionResult> getData() { Dictionary<object, object> obj = new Dictionary<object, object>(); obj.Add("1", "Punjab"); obj.Add("2", "Assam"); obj.Add("3", "UP"); obj.Add("4", "AP"); obj.Add("5", "J&K"); obj.Add("6", "Odisha"); obj.Add("7", "Delhi"); obj.Add("9", "Karnataka"); obj.Add("10", "Bangalore"); obj.Add("21", "Rajesthan"); obj.Add("31", "Jharkhand"); obj.Add("41", "chennai"); obj.Add("51", "jammu"); obj.Add("61", "Bhubaneshwar"); obj.Add("71", "Delhi"); obj.Add("19", "Karnataka"); return Ok(obj); }
حال ، ما در خواست یک متد از کلاینت میکنیم
اگر شما قسمت header را چک کرده باشید شما هیچ cach یی را دریافت نکرده اید.
میتوانیم ببینیم که این چیزی حدود 2449 miliseconds زمان response طول میکشد.
حال ما از caching استفاده میکنیم و میبینیم که چگونه میتوانیم زمان response را کاهش دهیم.
برای انجام این کار ما مجبوریم یک فیلتر شخصی بسازیم. فقط یک کلاس جدید اضافه کنید و نام آن را تغییر دهید.
حال ، این کلاس را از "ActionFilterAttribute" مشتق میکنیم :
using System; using System.Collections.Generic; using System.Linq; using System.Net.Http.Headers; using System.Web; using System.Web.Http.Filters; namespace Caching_In_API { public class CacheFilter : ActionFilterAttribute { public int TimeDuration { get; set; } public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) { actionExecutedContext.Response.Headers.CacheControl = new CacheControlHeaderValue { MaxAge = TimeSpan.FromSeconds(TimeDuration), MustRevalidate = true, Public = true }; } } }
در اینجا صفت TimeDuration را در کنترلر مورد نیاز اضافه میکنم.
حال ما اکشن کامل خود را در این جا میبینیم :
[AllowAnonymous] [Route("GetData")] [CacheFilter(TimeDuration=100)] public async Task<IHttpActionResult> getData() { Dictionary<object, object> obj = new Dictionary<object, object>(); obj.Add("1", "Punjab"); obj.Add("2", "Assam"); obj.Add("3", "UP"); obj.Add("4", "AP"); obj.Add("5", "J&K"); obj.Add("6", "Odisha"); obj.Add("7", "Delhi"); obj.Add("9", "Karnataka"); obj.Add("10", "Bangalore"); obj.Add("21", "Rajesthan"); obj.Add("31", "Jharkhand"); obj.Add("41", "chennai"); obj.Add("51", "jammu"); obj.Add("61", "Bhubaneshwar"); obj.Add("71", "Delhi"); obj.Add("19", "Karnataka"); return Ok(obj); }
پروژه خود را اجرا کنید،دفعه ی اول داده هارا از database بازیابی میکنید و سری بعد اطلاعات را از حافظه Local میاورد.
در response بعدی زمان آن کاهش یافته است.
اگر شما قسمت header صفحه ی خود را ببینید خواهید دید که cach را دریافت کرده اید :
ما در این روش از فیلتر کش شخصی شده ساخته ایم وآن را در web API روی متد اکشن پذیرفته ایم.
- ASP.net
- 1k بازدید
- 2 تشکر