وبلاگ تیم IranDNN

rss

در این وبلاگ آخرین رویدادهای ما را دنبال کنید و ما را در توسعه یاری دهید.

Caching یک راهکار برای ذخیره سازی داده هایی  که مکررا نیاز به فراخوانی آنها است در یک محل ذخیره سازی موقت میباشد. این تکنیک کارایی و مقیاس پذیری سایت را به مقدار زیادی افزایش میدهد . 

وقتی Chashing  اجرا میشود یه کپی از فایل اصلی در یک محل ذخیره سازی موقت ایجاد میشود و وقتی دفعات بعد که داده کش شده فراخوانی میشود سیستم با سرعت بیشتری نسبت به قبل اقدام به خواندن داده مربوطه میکند بنابراین با توجه به اهمیت این موضوع ASP.NET Core راهکار های مختلفی را برای کش کردن معرفی میکند مانند : 

In-Memory Cache, Distributed Cache و Response Cache که در این مقاله تمرکز ما بر In-Memory Cache میباشد.

In-Memory Cache داده ها را در memory وب سروری که سایت ما بر روی آن قرار دارد ذخیره میکند .

مراحل پیاده سازی:

پیکربندی :در ابتدا یک پروژه ی خالی ASP.NET Core را ایجاد نمایید و به طور پیش فرض پروژه ی ما فاقد هرگونه تنظیمات اولیه برای اجرای کش در اپلیکیشن میباشد بنابراین در ابتدا نیاز هست تغییراتی را در project.json ایجاد کنیم به مانند کد زیر

  "dependencies": { 

    "Microsoft.NETCore.App": { 

      "version""1.1.0"

      "type""platform" 

    }, 

    "Microsoft.AspNetCore.Diagnostics""1.1.0"

    "Microsoft.AspNetCore.Mvc""1.1.1"

    "Microsoft.AspNetCore.Razor.Tools": { 

      "version""1.0.0-preview2-final"

      "type""build" 

    }, 

    "Microsoft.AspNetCore.Routing""1.1.0"

    "Microsoft.AspNetCore.Server.IISIntegration""1.1.0"

    "Microsoft.AspNetCore.Server.Kestrel""1.1.0"

    "Microsoft.AspNetCore.StaticFiles""1.1.0"

    "Microsoft.Extensions.Configuration.EnvironmentVariables""1.1.0"

    "Microsoft.Extensions.Configuration.Json""1.1.0"

    "Microsoft.Extensions.Logging""1.1.0"

    "Microsoft.Extensions.Logging.Console""1.1.0"

    "Microsoft.Extensions.Logging.Debug""1.1.0"

    "Microsoft.Extensions.Options.ConfigurationExtensions""1.1.0"

    "Microsoft.VisualStudio.Web.BrowserLink.Loader""14.1.0"

    "Microsoft.Extensions.Caching.Memory""1.1.0"

    "BundlerMinifier.Core""2.3.327" 

  }, 

   

  "tools": { 

    "Microsoft.AspNetCore.Razor.Tools""1.0.0-preview2-final"

    "Microsoft.AspNetCore.Server.IISIntegration.Tools""1.0.0-preview2-final" 

  }, 

   

  "frameworks": { 

    "netcoreapp1.0": { 

      "imports": [ 

        "dotnet5.6"

        "portable-net45+win8" 

      

    

  }, 

   

  "buildOptions": { 

    "emitEntryPoint"true

    "preserveCompilationContext"true 

  }, 

   

  "runtimeOptions": { 

    "configProperties": { 

      "System.GC.Server"true 

    

  }, 

   

  "publishOptions": { 

    "include": [ 

      "wwwroot"

      "**/*.cshtml"

      "appsettings.json"

      "web.config" 

    

  }, 

   

  "scripts": { 

    "prepublish": [ "bower install""dotnet bundle" ], 

    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" 

  

}

 In-Memory caching یک سرویس هست که به وسیله ی تزریق وابستگی فابل فراخوانی میباشد و نیاز هست که  در ConfigureServices آن را ثبت نام کنیم 

public void ConfigureServices(IServiceCollection services) 

        

            services.AddMvc(); 

            services.AddMemoryCache(); 

        }

برای اجرای In-MemoryCaching  ما یک کنترلر به نام HomeController ایجاد میکنیم و سپس interface مربوط به ImemoryCache را ایجاد کرده و با استفاده از تزریق وابستگی سازنده آن را مقدار دهی میکنیم.

using Microsoft.AspNetCore.Mvc; 

using Microsoft.Extensions.Caching.Memory; 

using System; 

   

namespace MemoryCacheApplication.Controllers 

    public class HomeController : Controller 

    

        private readonly IMemoryCache memoryCache; 

   

        public HomeController(IMemoryCache memoryCache) 

        

            this.memoryCache = memoryCache; 

        

    

}

سپس یک action  تعریف کرده که در صورت وجود نداشتن داده ای درون کش آن را مقدار دهی میکند

public IActionResult Index() 

        

            DateTime currentTime; 

            bool isExist = memoryCache.TryGetValue("CacheTime"out currentTime); 

            if (!isExist) 

            {                

                currentTime = DateTime.Now;                 

                var cacheEntryOptions = new MemoryCacheEntryOptions() 

                    .SetSlidingExpiration(TimeSpan.FromSeconds(30)); 

   

                memoryCache.Set("CacheTime", currentTime, cacheEntryOptions); 

            

            return View(currentTime); 

        }

کد های بالا از بعضی از توابع سرویس InMemory cache استفاده مینماید که زیر آن ها را توضیح میدهیم

1.TryGetValue این متد مقدار را از کش خوانده و آن را درون پارامتری از نوع out  قرار میدهد و در صورت وجود داشتن مقداری درون کش مقدار True و در غیر این صورت False را بر میگرداند

2.Set این متد داده ها را درون کش مینویسد 

3.SetSlidingExpiration این متد تاریخ انقضا مورد نظر ما را برای کش قرار میدهد و اگر درخواستی بعد از این تاریخ برسد داده ها دوباره درون کش قرار میگیرند.

 

و در آخر ما یک View ایجاد کرده و نام آن را Index قرارداده 

@model DateTime? 

<div class="row"

    <div class="col-md-3"

        <h3> Current Time: @DateTime.Now.ToString()</h3

    </div

    <div class="col-md-3"

        <h3>Cached Time: @Model.Value.ToString()</h3

    </div>        

</div>

کد بالا زمان حال و زمان کش را نمایش میدهد.

شیوه حذف داده از In-Memory Cache

به دو روش خود به خود یا دستی میشود داده ها را از کش پاک کرد اینجا ما به  دو مورد برای حذف اتوماتیک داده ها اشاره میکنیم

1.Memory Pressure در صورت فشار از جانب حافظه سیستم به طور خود کار اقدام به حذف داده ها میکند مگر آن که اولویت برابر با CacheItemPriority.NeverRemove قرار گیرد

2.Sliding Expiration ما این مقدار را بر اساس timespan  قرار میدهیم که مشخص کننده آن است که چه مقدار زمان بعد از ایجاد ، کش مورد نظر معتبر میباشد.

کد های زیر نمونه ای از اجرای این دستورات میباشند

[HttpGet] 

        public IActionResult Index() 

        

            DateTime currentTime = memoryCache.GetOrCreate("CacheTime", entry => 

              

                  entry.SlidingExpiration = TimeSpan.FromSeconds(45); 

                  return DateTime.Now; 

              });             

            return View(currentTime); 

        }

سپس یک ویو ایجاد کرد با نام Index 

@model DateTime? 

   

@using (Html.BeginForm("RemoveCache","Home")) 

    <div class="row"

        <div class="col-md-3"

            <h3> Current Time: @DateTime.Now.ToString()</h3

        </div

        <div class="col-md-3"

            <h3> Cache Time: @(Model!=null ? @Model.ToString() : "Cache is not available")</h3

        </div

        <div class="col-md-3"

            <input type="submit" class="btn btn-danger" value="Remove" /> 

        </div

    </div

}

برای حذف دستی یک کش از نمونه کد زیر میشود استفاده کرد

[HttpPost] 

        public IActionResult RemoveCache() 

        {             

            memoryCache.Remove("CacheTime"); 

            DateTime? currentTime = memoryCache.Get<DateTime?>("CacheTime"); 

            return View("Index",currentTime); 

        }

نمایش 0 نظر
your Comment will be showing after administrator's approval







b i u quote


Save Comment

برچسب‌ها

واتسون Answers ASP.net asp.net core asp.net mvc asp.net webforms bms business management C# captcha EPPlus Excel HotCake In-Memory Caching portal RUP Scrum security code Successful Website support system use case leveling Usecase Model web portal zamanak آموزش مجازی اپلیکیشن های هوشمند ارتباط با مشتری استراتژی سایت استودیو دانش پاسپورت ایران پرتال پرتال مشتریان پرسشنامه پیام صوتی تحصیل در خارج توانایی پاسخ گویی جشنواره خرید آنلاین خودرو خودرو تویوتا دات نت نیوک زددگی زمانک سامانه bms سامانه پشتیبانی آنلاین سطوح ابر سطوح دریا سطوح ماهی سطوح نمودار موارد کاربرد سفر بودن ویزا سند نمودار مورد کاربرد سیستم ثبت سفارش خودرو شهرداری تهران طراحی وب فرآیند یکپارچه رشنال فرق بین متدولوژی RUP و اسکرام فهم زبان طبیعی فکس فکس خودکار گسترش مدل های سفارشی ماژول ماژول استخدام ماژول رزومه متدولوژی RUP متدولوژی اسکرام مخاطبین سایت مدیریت کسب و کار مزایای فرآیند RUP معماری سه لایه معماری نرم افزار میزکار مشتری نرم افزار نرم افزار LMS نرم افزار آموزش مجازی نوآور همراه هات کیک وب سایت موفق ویزا کار کپچا کلمه امنیتی
بالا