Bagikan melalui


Tutorial: Menerapkan caching dengan integrasi .NET.NET Aspire

Aplikasi cloud-native sering memerlukan berbagai jenis solusi caching yang dapat diskalakan untuk meningkatkan kinerja. .NET Aspire integrasi menyederhanakan proses menyambungkan ke layanan penembolokan populer seperti Redis. Dalam artikel ini, Anda akan mempelajari cara:

  • Buat aplikasi inti dasar ASP.NET yang disiapkan untuk menggunakan .NET Aspire.
  • Tambahkan integrasi .NET Aspire untuk terhubung ke Redis dan menerapkan caching.
  • Konfigurasikan integrasi .NET.NET Aspire untuk memenuhi persyaratan tertentu.

Artikel ini membahas cara menggunakan dua jenis kliring ASP.NET Core yang berbeda dengan menggunakan .NET Aspire dan Redis:

  • Output caching: Metode caching yang dapat dikonfigurasi dan diperluas untuk menyimpan seluruh respons HTTP untuk permintaan di waktu mendatang.
  • Penembolokan terdistribusi: Cache yang dibagikan oleh beberapa server aplikasi yang memungkinkan Anda untuk menyimpan bagian data tertentu. Cache terdistribusi biasanya dipertahankan sebagai layanan eksternal ke server aplikasi yang mengaksesnya dan dapat meningkatkan performa dan skalabilitas aplikasi ASP.NET Core.

Prasyarat

Untuk bekerja dengan .NET.NET Aspire, Anda memerlukan hal berikut yang diinstal secara lokal:

Untuk informasi selengkapnya, lihat penyiapan dan alat .NET.NET Aspire, dan .NET.NET Aspire SDK.

Membuat proyek

  1. Di bagian atas Visual Studio, navigasikan ke File>Proyek>Baru....
  2. Di jendela dialog, masukkan .NET Aspire ke dalam kotak pencarian templat proyek dan pilih aplikasi .NET.NET Aspire Starter. Pilih , kemudianBerikutnya.
  3. Pada layar Konfigurasikan proyek baru Anda:
    • Masukkan nama Proyek AspireRedis.
    • Biarkan nilai lainnya di defaultnya dan pilih Berikutnya.
  4. Pada layar informasi tambahan:
    • Pastikan .NET 9.0 dipilih.
    • Hilangkan centang Gunakan Redis untuk penyimpanan sementara. Anda akan menerapkan pengaturan cache Anda sendiri.
    • Pilih Buat.

Visual Studio membuat solusi .NET Aspire baru yang terdiri dari proyek berikut:

  • AspireRedis.Web - Proyek UI Blazor dengan konfigurasi .NET Aspire default.
  • AspireRedis.ApiService - API Minimal dengan konfigurasi .NET.NET Aspire default yang menyediakan frontend dengan data.
  • AspireRedis.AppHost - Proyek orkestrator yang dirancang untuk menyambungkan dan mengonfigurasi berbagai proyek dan layanan aplikasi Anda.
  • AspireRedis.ServiceDefaults - Proyek bersama untuk mengelola konfigurasi yang digunakan kembali di seluruh proyek dalam solusi Anda yang terkait denganketahanan , penemuan layanan , dan telemetri.

Mengonfigurasi proyek App Host

  1. Tambahkan 📦Aspire. Hosting.Redis paket NuGet ke proyek AspireRedis.AppHost:

    dotnet add package Aspire.Hosting.Redis
    

    Untuk informasi selengkapnya, lihat dotnet menambahkan paket atau Mengelola dependensi paket di aplikasi .NET.

  2. Perbarui file Program.cs proyek AspireRedis.AppHost agar sesuai dengan kode berikut:

    var builder = DistributedApplication.CreateBuilder(args);
    
    var redis = builder.AddRedis("cache");
    
    var apiservice = builder.AddProject<Projects.AspireRedis_ApiService>("apiservice")
        .WithReference(redis);
    
    builder.AddProject<Projects.AspireRedis_Web>("webfrontend")
        .WithExternalHttpEndpoints()
        .WithReference(apiservice)
        .WithReference(redis);
    
    builder.Build().Run();
    

Kode sebelumnya membuat instans kontainer Redis lokal dan mengonfigurasi UI serta API agar secara otomatis menggunakan instans tersebut untuk output dan penyimpanan sementara terdistribusi. Kode ini juga mengonfigurasi komunikasi antara antarmuka pengguna frontend dan API backend menggunakan penemuan layanan. Dengan penggunaan penemuan layanan implisit dari .NET.NET Aspire, proses menyiapkan dan mengelola koneksi layanan menjadi lebih sederhana untuk meningkatkan produktivitas pengembang. Dalam konteks tutorial ini, fitur ini menyederhanakan cara Anda terhubung ke Redis.

Secara tradisional, Anda akan menentukan string koneksi Redis secara manual di setiap file appsettings.json proyek:

{
  "ConnectionStrings": {
    "cache": "localhost:6379"
  }
}

Mengonfigurasi string koneksi dengan metode ini, sementara fungsional, memerlukan duplikat string koneksi di beberapa proyek, yang dapat rumit dan rawan kesalahan.

Mengonfigurasi antarmuka pengguna dengan cache output

  1. Tambahkan paket integrasi .NET Aspire Stack Exchange Redis cache output ke aplikasi AspireRedis.Web Anda.

    dotnet add package Aspire.StackExchange.Redis.OutputCaching
    
  2. Dalam file Program.cs dari proyek AspireRedis.WebBlazor, segera setelah baris var builder = WebApplication.CreateBuilder(args);, tambahkan pemanggilan ke metode ekstensi AddRedisOutputCache:

    builder.AddRedisOutputCache("cache");
    

    Metode ini menyelesaikan tugas-tugas berikut:

    • Mengonfigurasi penyimpanan cache output ASP.NET Core untuk menggunakan instance Redis dengan nama koneksi yang ditentukan.
    • Secara otomatis mengaktifkan pemeriksaan kesehatan, pengelogan, dan telemetri yang sesuai.
  3. Ganti konten file Home.razor dari proyek dengan yang berikut:

    @page "/"
    @attribute [OutputCache(Duration = 10)]
    
    <PageTitle>Home</PageTitle>
    
    <h1>Hello, world!</h1>
    
    Welcome to your new app on @DateTime.Now
    

    Integrasi mencakup atribut [OutputCache], yang menyimpan seluruh respons yang dirender. Halaman ini juga menyertakan panggilan ke @DateTime.Now untuk membantu memverifikasi bahwa respons di-cache.

Konfigurasi API dengan cache terdistribusi

  1. Tambahkan .NET Aspire Stack Exchange Redis paket integrasi penembolokan terdistribusi ke aplikasi AspireRedis.ApiService Anda:

    dotnet add package Aspire.StackExchange.Redis.DistributedCaching
    
  2. Di bagian atas file Program.cs, tambahkan panggilan ke AddRedisDistributedCache:

    builder.AddRedisDistributedCache("cache");
    
  3. Dalam file Program.cs, tambahkan pernyataan using berikut:

    using System.Text;
    using System.Text.Json;
    using Microsoft.Extensions.Caching.Distributed;
    
  4. Dalam file Program.cs, ganti kode titik akhir /weatherforecast yang ada dengan yang berikut ini:

    app.MapGet("/weatherforecast", async (IDistributedCache cache) =>
    {
        var cachedForecast = await cache.GetAsync("forecast");
    
        if (cachedForecast is null)
        {
            var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" };
            var forecast = Enumerable.Range(1, 5).Select(index =>
            new WeatherForecast
            (
                DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
                Random.Shared.Next(-20, 55),
                summaries[Random.Shared.Next(summaries.Length)]
            ))
            .ToArray();
    
            await cache.SetAsync("forecast", Encoding.UTF8.GetBytes(JsonSerializer.Serialize(forecast)), new ()
            {
                AbsoluteExpiration = DateTime.Now.AddSeconds(10)
            });
    
            return forecast;
        }
    
        return JsonSerializer.Deserialize<IEnumerable<WeatherForecast>>(cachedForecast);
    })
    .WithName("GetWeatherForecast");
    

Menguji aplikasi secara lokal

Uji perilaku caching (penyimpanan sementara) aplikasi Anda menggunakan langkah-langkah berikut:

  1. Jalankan aplikasi menggunakan Visual Studio dengan menekan F5.
  2. Jika dialog Mulai Docker Desktop muncul, pilih Ya untuk memulai layanan tersebut.
  3. Dasbor .NET.NET Aspire dimuat di browser dan mencantumkan proyek UI dan API.

Uji keluaran cache.

  1. Pada halaman proyek, di baris webfrontend, klik tautan localhost di kolom Endpoints untuk membuka antarmuka pengguna dari aplikasi Anda.
  2. Aplikasi akan menampilkan waktu saat ini di halaman beranda.
  3. Segarkan penjelajah setiap beberapa detik sekali untuk melihat halaman yang sama yang dikembalikan oleh penyimpanan sementara keluaran. Setelah 10 detik, cache kedaluwarsa dan halaman dimuat ulang dengan waktu yang diperbarui.

Uji cache terdistribusi:

  1. Navigasi ke halaman Cuaca di antarmuka pengguna untuk memuat tabel data cuaca acak.
  2. Segarkan browser beberapa detik sekali untuk melihat data cuaca yang sama yang dikembalikan oleh cache output. Setelah 10 detik, cache kedaluwarsa dan halaman dimuat ulang dengan data cuaca yang diperbarui.

Selamat! Anda mengonfigurasi aplikasi ASP.NET Core untuk menggunakan output dan caching terdistribusi menggunakan .NET Aspire.