Cara menggunakan cache dalam memori di ASP.NET Core

ASP.NET Core adalah kerangka kerja ramping dan modular yang dapat digunakan untuk membangun aplikasi web modern berkinerja tinggi di Windows, Linux, atau MacOS. Tidak seperti ASP.NET warisan, ASP.NET Core tidak memiliki Cacheobjek. Namun, ASP.NET Core memberikan dukungan untuk beberapa jenis cache yang berbeda termasuk cache dalam memori, cache terdistribusi, dan cache respons.

Pada artikel ini, kita akan melihat bagaimana Anda dapat meningkatkan kinerja dan skalabilitas aplikasi ASP.NET Core Anda dengan menyimpan data yang jarang berubah di cache dalam memori. Seperti biasa, saya akan menyertakan contoh kode untuk menggambarkan konsep yang dibahas. 

Cara mengaktifkan cache di memori di ASP.NET Core

Cache dalam memori di ASP.NET Core adalah layanan yang dapat Anda gabungkan ke dalam aplikasi Anda menggunakan injeksi ketergantungan. Setelah Anda membuat proyek ASP.NET Core di Visual Studio, Anda dapat mengaktifkan cache dalam memori dalam ConfigureServicesmetode di Startupkelas seperti yang ditunjukkan pada potongan kode di bawah ini.

public void ConfigureServices (layanan IServiceCollection)

{

    services.AddMvc ();

    services.AddMemoryCache ();

}

Untuk bekerja dengan cache dalam memori di ASP.NET Core, Anda perlu menggunakan IMemoryCacheantarmuka. Berikut tampilannya: 

antarmuka publik IMemoryCache: IDisposable

{

    bool TryGetValue (kunci objek, nilai objek keluar);

    ICacheEntry CreateEntry (kunci objek);

    batal Hapus (kunci objek);

}

Anda dapat mendaftarkan IMemoryCachedi  ConfigServicesmetode menggunakan AddMemoryCachemetode yang kami periksa di atas. Kemudian Anda harus memasukkan objek cache dalam konstruktor kelas pengontrol Anda seperti yang ditunjukkan pada potongan kode di bawah ini.

  cache IMemoryCache pribadi;

  public CacheController (IMemoryCache cache)

        {

            this.cache = cache;

        }

Dan hanya itu yang perlu Anda lakukan untuk menyiapkan dukungan untuk cache dalam memori di aplikasi ASP.NET Core Anda. Pada bagian selanjutnya, kita akan melihat bagaimana kita dapat bekerja dengan API cache di ASP.NET Core untuk menyimpan dan mengambil objek.

Cara menyimpan dan mengambil objek menggunakan ASP.NET Core IMemoryCache

Untuk menyimpan objek menggunakan IMemoryCacheantarmuka Anda perlu menggunakan Set()metode seperti yang ditunjukkan pada potongan kode di bawah ini. Perhatikan bahwa versi Set()metode yang kami gunakan dalam contoh ini menerima dua parameter. Parameter pertama adalah nama kunci dan parameter kedua adalah nilai, yaitu objek yang akan disimpan dalam cache yang dapat diidentifikasi dengan menggunakan kunci tersebut.

[HttpGet]

        string publik Get ()

        {

            cache.Set ("Key", DateTime.Now.ToString ());

            return "Ini adalah metode pengujian ...";

        }

Untuk mengambil item dari cache, Anda dapat memanfaatkan Get()metode seperti yang ditunjukkan di bawah ini.

  [HttpGet (“{key}”)]

        string publik Dapatkan (kunci string)

        {

            kembali cache.Get (key);

        }

Anda dapat menggunakan TryGet()metode pada objek cache untuk memeriksa apakah kunci yang ditentukan ada di cache. Berikut adalah versi modifikasi dari Getmetode kami yang menggambarkan bagaimana hal ini dapat dicapai.

 [HttpGet]

        string publik Get ()

        {

            kunci string;

            string obj;

            if (! cache.TryGetValue (key, out obj))

            {

                obj = DateTime.Now.ToString ();

                cache.Set (key, obj);

            }

            return obj;

        }

Ada metode lain, disebut GetOrCreate, yang bisa digunakan untuk mengambil data yang di-cache berdasarkan kunci yang disediakan. Jika kuncinya tidak ada, metode akan membuatnya.

[HttpGet]

        string publik Get ()

        {

            return cache.GetOrCreate ("Key",

                cacheEntry => {

                            return DateTime.Now.ToString ();

                         });

        }

Perhatikan bahwa versi asinkron dari metode ini tersedia yang disebut GetOrCreateAsync. Berikut adalah daftar kode lengkap CacheControllerkelas kami untuk referensi Anda.

menggunakan Sistem;

menggunakan Microsoft.AspNetCore.Mvc;

menggunakan Microsoft.Extensions.Caching.Memory;

namespace InMemoryCaching.Controllers

{

    [Rute (“api / [pengontrol]”)]

    kelas publik CacheController: Controller

    {

        cache IMemoryCache pribadi;

        public CacheController (IMemoryCache cache)

        {

            this.cache = cache;

        }

        [HttpGet]

        string publik Get ()

        {

            return cache.GetOrCreate ("Key",

                cacheEntry => {

                            return DateTime.Now.ToString ();

                         });

        }

    }

}

Cara menetapkan kebijakan kedaluwarsa pada data cache di ASP.NET Core

Perhatikan bahwa Anda dapat menyetel kebijakan kedaluwarsa absolut dan geser pada data cache Anda. Sementara yang pertama digunakan untuk menentukan durasi objek harus berada di cache, yang terakhir digunakan untuk menentukan durasi di mana objek akan berada di cache saat tidak ada aktivitas — yaitu, item akan dihapus dari cache ketika durasi ketidakaktifan yang ditentukan berlalu.

Untuk menyetel kebijakan kedaluwarsa Anda menggunakan MemoryCacheEntryOptionskelas seperti yang ditunjukkan pada cuplikan kode di bawah ini.

MemoryCacheEntryOptions cacheExpirationOptions = new MemoryCacheEntryOptions ();

cacheExpirationOptions.AbsoluteExpiration = DateTime.Now.AddMinutes (30);

cacheExpirationOptions.Priority = CacheItemPriority.Normal;

cache.Set ("Key", DateTime.Now.ToString (), cacheExpirationOptions);

Catat penggunaan Priorityproperti pada MemoryCacheEntryOptions instance dalam cuplikan kode di atas. The Prioritymenspesifikasikan properti yang objek (berdasarkan prioritas sudah ditetapkan) harus dihapus dari cache sebagai bagian dari strategi runtime ke memori reclaim setiap kali web server kehabisan ruang memori.

Untuk mengatur prioritas, kami menggunakan CacheItemPriorityenum. Ini dapat memiliki salah satu dari kemungkinan nilai berikut: Low, Normal, High, dan NeverRemove. Penyedia cache dalam memori di ASP.NET Core akan menghapus entri cache saat berada di bawah tekanan memori kecuali Anda telah menyetel prioritas cache ke CacheItemPriority.NeverRemove.

Anda mungkin juga ingin mendaftarkan callback yang akan dijalankan setiap kali item dihapus dari cache. Potongan kode berikut menggambarkan bagaimana hal ini dapat dicapai.

cacheExpirationOptions.RegisterPostEvictionCallback

(CacheItemChangedHandler, ini);

Anda bahkan dapat mengatur ketergantungan antara objek yang di-cache. Sebagai contoh, Anda mungkin ingin menghapus item tertentu dari cache jika beberapa item terkait telah dihapus. Kami akan mengeksplorasi ini lebih jauh dan banyak fitur lain dari caching di ASP.NET Core di posting saya selanjutnya di sini. Sampai saat itu, Anda mungkin ingin melihat halaman yang relevan di dokumentasi ASP.NET Core Microsoft. 

Cara melakukan lebih banyak di ASP.NET dan ASP.NET Core:

  • Cara menggunakan cache dalam memori di ASP.NET Core
  • Bagaimana menangani kesalahan di ASP.NET Web API
  • Cara meneruskan beberapa parameter ke metode pengontrol API Web
  • Cara log permintaan dan respons metadata di ASP.NET Web API
  • Cara bekerja dengan HttpModules di ASP.NET
  • Versi lanjutan dalam ASP.NET Core Web API
  • Cara menggunakan injeksi ketergantungan di ASP.NET Core
  • Cara bekerja dengan sesi di ASP.NET
  • Bagaimana bekerja dengan HTTPHandlers di ASP.NET
  • Cara menggunakan IHostedService di ASP.NET Core
  • Cara menggunakan layanan sabun WCF di ASP.NET Core
  • Cara meningkatkan kinerja aplikasi ASP.NET Core
  • Cara menggunakan ASP.NET Core Web API menggunakan RestSharp
  • Cara bekerja dengan masuk ke ASP.NET Core
  • Cara menggunakan MediatR di ASP.NET Core
  • Cara bekerja dengan status sesi di ASP.NET Core
  • Cara menggunakan Nancy di ASP.NET Core
  • Pahami pengikatan parameter di ASP.NET Web API
  • Cara mengupload file di ASP.NET Core MVC
  • Bagaimana menerapkan penanganan pengecualian global di ASP.NET Core Web API
  • Cara menerapkan pemeriksaan kesehatan di ASP.NET Core
  • Praktik terbaik dalam caching di ASP.NET
  • Cara menggunakan perpesanan Apache Kafka di .NET
  • Cara mengaktifkan CORS di API Web Anda
  • Kapan menggunakan WebClient vs. HttpClient vs. HttpWebRequest
  • Cara bekerja dengan Redis Cache di .NET
  • Kapan menggunakan Task.WaitAll vs. Task.WhenAll di .NET