Bagikan melalui


ASP.NET Singgahan Output untuk Azure Cache for Redis

Penyedia Cache Output Redis adalah mekanisme penyimpanan di luar proses untuk data cache output. Data ini khusus untuk respons HTTP penuh (penembolokan output halaman). Penyedia terhubung ke titik ekstensibilitas penyedia cache output baru yang diperkenalkan pada ASP.NET 4.

Untuk aplikasi ASP.NET Core, lihat Penembolokan Output di inti ASP.NET menggunakan Redis di .NET 8.

Untuk menggunakan Penyedia Singgahan Output Redis, pertama-tama konfigurasikan cache Anda, lalu konfigurasikan aplikasi ASP.NET Anda menggunakan paket Redis Output Cache Provider NuGet. Artikel ini menyediakan panduan tentang mengonfigurasi aplikasi Anda untuk menggunakan Penyedia Singgahan Output Redis. Untuk informasi selengkapnya tentang membuat dan mengonfigurasi instans Azure Cache for Redis, lihat Membuat cache.

Menyimpan output halaman inti ASP.NET di Redis

Untuk spesifikasi fitur lengkap, lihat ASP.NET penembolokan output inti.

Untuk contoh aplikasi yang menunjukkan penggunaan, lihat Aplikasi Web .NET 8 dengan Redis Output Caching dan Azure OpenAI.

Menyimpan output halaman ASP.NET di Redis

Untuk mengonfigurasi aplikasi klien di Visual Studio menggunakan paket Azure Cache for Redis Session State NuGet, pilih NuGet Package Manager, Package Manager Console dari menu Peralatan.

Jalankan perintah berikut dari Package Manager Console jendela:

Install-Package Microsoft.Web.RedisOutputCacheProvider

Paket Redis Output Cache Provider NuGet memiliki dependensi pada paket StackExchange.Redis . Jika paket StackExchange.Redis tidak ada di proyek Anda, paket tersebut akan diinstal. Untuk informasi selengkapnya tentang paket Redis Output Cache Provider NuGet, lihat halaman RedisOutputCacheProvider NuGet.

Paket NuGet mengunduh dan menambahkan referensi perakitan yang diperlukan dan menambahkan bagian berikut ke dalam file web.config Anda. Bagian ini berisi konfigurasi yang diperlukan untuk aplikasi ASP.NET Anda untuk menggunakan Penyedia Singgahan Output Redis.

<caching>
  <outputCache defaultProvider="MyRedisOutputCache">
    <providers>
      <add name="MyRedisOutputCache" type="Microsoft.Web.Redis.RedisOutputCacheProvider"
           host=""
           accessKey=""
           ssl="true" />
    </providers>
  </outputCache>
</caching>

Konfigurasikan atribut di kolom pertama dengan nilai dari cache Anda di Microsoft portal Azure. Juga, konfigurasikan nilai lain yang Anda inginkan. Untuk instruksi tentang mengakses properti tembolokan Anda, lihat Konfigurasikan pengaturan Azure Cache for Redis.

Atribut Jenis Default Deskripsi
_tuan rumah* string "localhost" Alamat IP server Redis atau nama host
pelabuhan bilangan bulat positif 6379 (non-TLS/SSL)
6380 (TLS/SSL)
Redis port server
accessKey string "" Ulangi kata sandi server ketika otorisasi Redis diaktifkan. Nilainya adalah string kosong secara default, yang berarti penyedia status sesi tidak menggunakan kata sandi apa pun saat tersambung ke server Redis. Jika server Redis Anda berada dalam jaringan yang dapat diakses publik seperti Azure Cache for Redis, pastikan untuk mengaktifkan otorisasi Redis untuk meningkatkan keamanan, dan memberikan kata sandi yang aman.
ssl Boolean salah Apakah akan tersambung ke server Redis melalui TLS. Nilai ini salah secara default karena Redis tidak mendukung TLS secara default. Jika Anda menggunakan Azure Cache for Redis, yang mendukung SSL secara default, pastikan untuk mengatur nilai ini ke true untuk meningkatkan keamanan.

Port non-TLS dinonaktifkan secara default untuk tembolokan baru. Tentukan benar untuk setelan ini untuk menggunakan port bukan-TLS. Untuk informasi selengkapnya tentang mengaktifkan port non-TLS, lihat bagian Port Akses di artikel Mengonfigurasi singgahan.
databaseIdNumber bilangan bulat positif 0 Atribut ini hanya dapat ditentukan melalui web.config AppSettings.

Tentukan database Redis mana yang akan digunakan.
connectionTimeoutInMilliseconds bilangan bulat positif Disediakan oleh StackExchange.Redis Digunakan untuk mengatur ConnectTimeout saat membuat StackExchange.Redis.ConnectionMultiplexer.
operasiTimeoutInMilliseconds bilangan bulat positif Disediakan oleh StackExchange.Redis Digunakan untuk mengatur SyncTimeout saat membuat StackExchange.Redis.ConnectionMultiplexer.
connectionString (String koneksi StackExchange.Redis valid) string n/a Baik referensi parameter ke AppSettings atau web.config, atau string koneksi StackExchange.Redis yang valid. Atribut ini dapat menyediakan nilai untuk host, port, accessKey, ssl, dan atribut StackExchange.Redis lainnya. Untuk melihat lebih dekat connectionString, lihat Pengaturan connectionString di bagian Catatan atribut.
settingsClassName
settingsMethodName
string
string
n/a Atribut ini hanya dapat ditentukan melalui web.config AppSettings.

Gunakan atribut ini untuk menyediakan string koneksi. _settingsClassName* harus berupa nama kelas yang memenuhi syarat rakitan yang berisi metode yang ditentukan oleh settingsMethodName.

Metode yang ditentukan oleh settingsMethodName harus ber publik, statis, dan batal (tidak menerima parameter), dengan tipe kembali string. Metode ini mengembalikan string koneksi aktual.
loggingClassName
loggingMethodName
string
string
n/a Atribut ini hanya dapat ditentukan melalui web.config AppSettings.

Gunakan atribut ini untuk men-debug aplikasi Anda dengan menyediakan log dari Session State/Output Cache bersama dengan log dari StackExchange.Redis. loggingClassName harus menjadi nama class yang memenuhi syarat perakitan yang berisi metode yang ditentukan oleh loggingMethodName.

Metode yang ditentukan oleh loggingMethodName harus berdasarkan publik, statis, dan batal (tidak menerima parameter), dengan jenis pengembalian System.IO.TextWriter.
applicationName string Nama modul dari proses saat ini atau "/" SessionStateProvider saja
Atribut ini hanya dapat ditentukan melalui web.config AppSettings.

Awalan nama aplikasi untuk digunakan dalam cache Redis. Pelanggan mungkin menggunakan cache Redis yang sama untuk tujuan yang berbeda. Untuk memastikan bahwa kunci sesi tidak bertabrakan, kunci sesi dapat diawali dengan nama aplikasi.
throwOnError Boolean benar SessionStateProvider saja
Atribut ini hanya dapat ditentukan melalui web.config AppSettings.

Apakah akan melempar pengecualian ketika terjadi kesalahan.

Untuk informasi selengkapnya tentang throwOnError, lihat Catatan tentang throwOnError di bagian Catatan atribut.
coba lagiTimeoutInMilliseconds bilangan bulat positif 5000 SessionStateProvider saja
Atribut ini hanya dapat ditentukan melalui web.config AppSettings.

Berapa lama untuk mencoba kembali ketika operasi gagal. Jika nilai ini kurang dari operationTimeoutInMilliseconds, penyedia tidak mencoba kembali.

Untuk informasi selengkapnya tentang mencoba kembaliTimeoutInMilliseconds, lihat Catatan tentang mencoba kembaliTimeoutInMilliseconds di bagian Catatan atribut.
redisSerializerType string n/a Menentukan nama tipe kelas yang memenuhi syarat untuk perakitan yang mengimplementasikan Microsoft.Web.Redis. Serializer dan yang berisi logika kustom untuk meserialisasikan dan mendeserialisasi nilai. Untuk informasi selengkapnya, lihat Tentang redisSerializerType di bagian Catatan atribut.

Catatan atribut

Pengaturan connectionString

Nilai connectionString digunakan sebagai kunci untuk mengambil string koneksi aktual dari AppSettings, jika string seperti itu ada di AppSettings. Jika tidak ditemukan di dalam AppSettings, nilai connectionString digunakan sebagai kunci untuk mengambil string koneksi aktual dari bagian ConnectionString web.config, jika bagian tersebut ada. Jika string koneksi tidak ada di AppSettings atau bagian ConnectionString web.config, nilai harfiah connectionString digunakan sebagai string koneksi saat membuat StackExchange.Redis.ConnectionMultiplexer.

Contoh berikut menggambarkan bagaimana connectionString digunakan.

Contoh 1

<connectionStrings>
    <add name="MyRedisConnectionString" connectionString="mycache.redis.cache.windows.net:6380,password=actual access key,ssl=True,abortConnect=False" />
</connectionStrings>

Di web.config, gunakan kunci sebagai nilai parameter alih-alih nilai aktual.

<sessionState mode="Custom" customProvider="MySessionStateStore">
    <providers>
        <add type = "Microsoft.Web.Redis.RedisSessionStateProvider"
             name = "MySessionStateStore"
             connectionString = "MyRedisConnectionString"/>
    </providers>
</sessionState>

Contoh 2

<appSettings>
    <add key="MyRedisConnectionString" value="mycache.redis.cache.windows.net:6380,password=actual access key,ssl=True,abortConnect=False" />
</appSettings>

Di web.config, gunakan kunci sebagai nilai parameter alih-alih nilai aktual.

<sessionState mode="Custom" customProvider="MySessionStateStore">
    <providers>
        <add type = "Microsoft.Web.Redis.RedisSessionStateProvider"
             name = "MySessionStateStore"
             connectionString = "MyRedisConnectionString"/>
    </providers>
</sessionState>

Contoh 3

<sessionState mode="Custom" customProvider="MySessionStateStore">
    <providers>
        <add type = "Microsoft.Web.Redis.RedisSessionStateProvider"
             name = "MySessionStateStore"
             connectionString = "mycache.redis.cache.windows.net:6380,password=actual access key,ssl=True,abortConnect=False"/>
    </providers>
</sessionState>

Catatan tentang throwOnError

Saat ini, jika terjadi kesalahan selama operasi sesi, penyedia status sesi akan memberikan pengecualian. Melempar pengecualian akan mematikan aplikasi.

Perilaku ini dimodifikasi dengan cara yang mendukung harapan pengguna penyedia status sesi ASP.NET yang ada sekaligus memungkinkan Anda untuk bertindak berdasarkan pengecualian. Perilaku default masih memberikan pengecualian ketika terjadi kesalahan, konsisten dengan penyedia status ASP.NET sesi lainnya. Kode yang ada harus bekerja sama seperti sebelumnya.

Jika Anda mengatur throwOnError ke false, maka alih-alih melemparkan pengecualian ketika kesalahan terjadi, itu gagal diam-diam. Untuk melihat apakah ada kesalahan dan, jika demikian, temukan apa pengecualiannya, periksa properti statis Microsoft.Web.Redis.RedisSessionStateProvider.LastException.

Catatan tentang coba lagiTimeoutInMilliseconds

Pengaturan retryTimeoutInMilliseconds menyediakan beberapa logika untuk menyederhanakan kasus di mana operasi sesi harus mencoba kembali pada kegagalan karena kesalahan jaringan atau sesuatu yang lain. Pengaturan retryTimeoutInMilliseconds juga memungkinkan Anda untuk mengontrol waktu istirahat lagi atau untuk sepenuhnya memilih keluar dari coba lagi.

Jika Anda mengatur retryTimeoutInMilliseconds ke angka, misalnya 2000, ketika operasi sesi gagal, ia mencoba kembali selama 2.000 milidetik sebelum memperlakukannya sebagai kesalahan. Agar penyedia status sesi menerapkan logika coba lagi ini, cukup konfigurasikan waktu habis. Coba lagi pertama akan terjadi setelah 20 milidetik, yang cukup dalam banyak kasus ketika kesalahan jaringan terjadi. Setelah itu, ia akan mencoba kembali setiap detik sampai waktu habis. Tepat setelah waktu habis, itu akan mencoba lagi sekali lagi untuk memastikan bahwa itu tidak akan memotong waktu habis oleh (paling banyak) satu detik.

Jika Anda tidak berpikir Anda perlu mencoba lagi atau jika Anda ingin menangani logika coba lagi sendiri, atur coba lagiTimeoutInMilliseconds ke 0. Misalnya, Anda mungkin tidak ingin mencoba kembali saat menjalankan server Redis pada mesin yang sama dengan aplikasi Anda.

Tentang redisSerializerType

Serialisasi untuk menyimpan nilai pada Redis dilakukan dalam format biner secara default, yang disediakan oleh kelas BinaryFormatter. Gunakan redisSerializerType untuk menentukan nama tipe kelas yang memenuhi syarat perakitan yang mengimplementasikan Microsoft.Web.Redis.ISerializer dan memiliki logika kustom untuk mesialisasikan dan mendeserialisasi nilai. Misalnya, berikut adalah kelas serializer Json menggunakan JSON.NET:

namespace MyCompany.Redis
{
    public class JsonSerializer : ISerializer
    {
        private static JsonSerializerSettings _settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All };

        public byte[] Serialize(object data)
        {
            return Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(data, _settings));
        }

        public object Deserialize(byte[] data)
        {
            if (data == null)
            {
                return null;
            }
            return JsonConvert.DeserializeObject(Encoding.UTF8.GetString(data), _settings);
        }
    }
}

Dengan asumsi kelas ini didefinisikan dalam perakitan dengan nama MyCompanyDll, Anda dapat mengatur parameter redisSerializerType untuk menggunakannya:

<sessionState mode="Custom" customProvider="MySessionStateStore">
    <providers>
        <add type = "Microsoft.Web.Redis.RedisSessionStateProvider"
             name = "MySessionStateStore"
             redisSerializerType = "MyCompany.Redis.JsonSerializer,MyCompanyDll"
             ... />
    </providers>
</sessionState>

Direktif cache output

Tambahkan direktif OutputCache ke setiap halaman yang ingin Anda singgahi outputnya.

<%@ OutputCache Duration="60" VaryByParam="*" %>

Dalam contoh sebelumnya, data halaman singgahan tetap berada di cache selama 60 detik, dan versi halaman yang berbeda di-cache untuk setiap kombinasi parameter. Untuk informasi selengkapnya tentang direktif OutputCache, lihat @OutputCache.

Setelah Anda melakukan langkah-langkah ini, aplikasi Anda dikonfigurasi untuk menggunakan Penyedia Singgahan Output Redis.

Penyedia cache output pihak ketiga

Lihat Penyedia Status ASP.NET Sesi untuk Azure Cache for Redis.