Penyedia Keadaan sesi ASP.NET untuk Redis Cache

Azure Cache for Redis menyediakan penyedia keadaan sesi yang dapat Anda gunakan untuk menyimpan keadaan sesi Anda dalam memori dengan Redis Cache sebagai ganti database SQL Server. Untuk menggunakan penyedia keadaan sesi tembolokan, pertama-tama konfigurasikan tembolokan Anda, lalu konfigurasikan aplikasi ASP.NET Anda untuk tembolokan menggunakan paket NuGet Keadaan Sesi Azure Cache for Redis. Untuk aplikasi ASP.NET Core, baca Sesi dan manajemen status di ASP.NET Core.

Sering kali tidak praktis dalam aplikasi cloud dunia nyata untuk menghindari penyimpanan beberapa bentuk status untuk sesi pengguna, tetapi beberapa pendekatan berdampak pada performa dan skalabilitas lebih dari yang lain. Jika Anda harus menyimpan status, solusi terbaik adalah menjaga jumlah status kecil dan menyimpannya dalam cookies. Jika tidak layak, solusi terbaik berikutnya adalah menggunakan status sesi ASP.NET dengan penyedia untuk didistribusikan dalam memori tembolokan. Solusi terburuk dari sudut pandang performa dan skalabilitas adalah menggunakan penyedia keadaan sesi yang didukung database. Topik ini menyediakan panduan tentang penggunaan Penyedia Keadaan Sesi ASP.NET untuk Azure Cache for Redis. Untuk informasi tentang opsi keadaan sesi lainnya, lihat opsi Keadaan Sesi ASP.NET.

Simpan keadaan sesi ASP.NET dalam tembolokan

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.RedisSessionStateProvider

Penting

Jika Anda menggunakan fitur pengklusteran dari tingkat premium, Anda harus menggunakan RedisSessionStateProvider 2.0.1 atau lebih tinggi atau pengecualian dilemparkan. Beralih ke 2.0.1 atau yang lebih tinggi adalah perubahan mencolok.

Paket Redis Session State Provider NuGet memiliki dependensi pada paket StackExchange.Redis. Jika paket StackExchange.Redis tidak ada di proyek Anda, artinya paket tersebut telah diinstal.

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 Keadaan Sesi Redis Cache.

<sessionState mode="Custom" customProvider="MySessionStateStore">
  <providers>
    <!-- Either use 'connectionString' OR 'settingsClassName' and 'settingsMethodName' OR use 'host','port','accessKey','ssl','connectionTimeoutInMilliseconds' and 'operationTimeoutInMilliseconds'. -->
    <!-- 'throwOnError','retryTimeoutInMilliseconds','databaseId' and 'applicationName' can be used with both options. -->
    <!--
      <add name="MySessionStateStore" 
        host = "127.0.0.1" [String]
        port = "" [number]
        accessKey = "" [String]
        ssl = "false" [true|false]
        throwOnError = "true" [true|false]
        retryTimeoutInMilliseconds = "5000" [number]
        databaseId = "0" [number]
        applicationName = "" [String]
        connectionTimeoutInMilliseconds = "5000" [number]
        operationTimeoutInMilliseconds = "1000" [number]
        connectionString = "<Valid StackExchange.Redis connection string>" [String]
        settingsClassName = "<Assembly qualified class name that contains settings method specified below. Which basically return 'connectionString' value>" [String]
        settingsMethodName = "<Settings method should be defined in settingsClass. It should be public, static, does not take any parameters and should have a return type of 'String', which is basically 'connectionString' value.>" [String]
        loggingClassName = "<Assembly qualified class name that contains logging method specified below>" [String]
        loggingMethodName = "<Logging method should be defined in loggingClass. It should be public, static, does not take any parameters and should have a return type of System.IO.TextWriter.>" [String]
        redisSerializerType = "<Assembly qualified class name that implements Microsoft.Web.Redis.ISerializer>" [String]
      />
    -->
    <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider"
         host=""
         accessKey=""
         ssl="true" />
  </providers>
</sessionState>

Bagian yang dikomentari memberikan contoh atribut dan pengaturan sampel untuk setiap atribut.

Konfigurasikan atribut dengan nilai di sisi kiri dari cache Anda di portal Microsoft Azure, dan konfigurasikan nilai lainnya sesuai keinginan. Untuk instruksi tentang mengakses properti tembolokan Anda, lihat Konfigurasikan pengaturan Azure Cache for Redis.

  • host - tentukan titik akhir tembolokan Anda.
  • port - gunakan port non-TLS / SSL Anda atau port TLS / SSL Anda, tergantung pada pengaturan TLS.
  • accessKey - gunakan kunci utama atau sekunder untuk tembolokan Anda.
  • ssl - benar jika Anda ingin mengamankan tembolokan / komunikasi klien dengan TLS; jika tidak palsu. Pastikan untuk menentukan port yang benar.
    • Port non-TLS dinonaktifkan secara default untuk tembolokan baru. Tentukan yang benar untuk pengaturan ini dengan menggunakan port TLS. Untuk informasi selengkapnya tentang mengaktifkan port non-TLS, lihat bagian Port Akses di artikel Mengonfigurasi singgahan.
  • throwOnError - benar jika Anda ingin pengecualian dimuncu;lkan jika terjadi kegagalan, atau salah jika Anda ingin operasi gagal secara diam-diam. Anda dapat memeriksa kegagalan dengan memeriksa properti Microsoft.Web.Redis.RedisSessionStateProvider.LastException statik. Defaultnya adalah true.
  • retryTimeoutInMilliseconds - Operasi yang gagal dicoba kembali selama interval ini, ditentukan dalam milidetik. Coba lagi pertama terjadi setelah 20 milidetik, dan selanjutnya coba lagi terjadi setiap detik sampai interval retryTimeoutInMillisecond berakhir. Segera setelah interval ini, operasi dicoba lagi satu kali terakhir. Jika operasi masih gagal, pengecualian dimunculkan kembali ke pemanggil, tergantung pengaturan throwOnError. Nilai default adalah 0, yang berarti tidak ada lagi coba kembali.
  • databaseId – Tentukan database mana yang akan digunakan untuk data keluaran tembolokan. Jika tidak ditentukan, nilai default 0 yang akan digunakan.
  • applicationName - Kunci disimpan dalam redis sebagai {<Application Name>_<Session ID>}_Data. Skema penamaan ini membuat beberapa aplikasi dapat berbagi instans Redis yang sama. Parameter ini bersifat opsional dan jika Anda tidak memberikannya maka nilai default yang digunakan.
  • connectionTimeoutInMilliseconds - Pengaturan ini membuat Anda dapat mengambil alih pengaturan connectTimeout di klien StackExchange.Redis. Jika tidak ditentukan, pengaturan connectTimeout default 5000 yang digunakan. Untuk informasi selengkapnya, lihat Model konfigurasi StackExchange.Redis.
  • connectionTimeoutInMilliseconds - Pengaturan ini membuat Anda dapat menimpa pengaturan syncTimeout di klien StackExchange.Redis. Jika tidak ditentukan, pengaturan syncTimeout default 1000 yang digunakan. Untuk informasi selengkapnya, lihat Model konfigurasi StackExchange.Redis.
  • redisSerializerType - Pengaturan ini membuat Anda dapat menentukan serialisasi kustom konten sesi yang dikirim ke Redis. Jenis yang ditentukan harus menerapkan dan Microsoft.Web.Redis.ISerializer harus mendeklarasikan konstruktor tanpa parameter publik. Secara default System.Runtime.Serialization.Formatters.Binary.BinaryFormatter digunakan.

Untuk informasi selengkapnya tentang properti ini, lihat pengumuman posting blog asli di Pengumuman Penyedia Keadaan Sesi ASP.NET untuk Redis.

Jangan lupa untuk mengomentari bagian penyedia keadaan sesi InProc standar di web.config Anda.

<!-- <sessionState mode="InProc"
     customProvider="DefaultSessionProvider">
     <providers>
        <add name="DefaultSessionProvider"
              type="System.Web.Providers.DefaultSessionStateProvider,
                    System.Web.Providers, Version=1.0.0.0, Culture=neutral,
                    PublicKeyToken=31bf3856ad364e35"
              connectionStringName="DefaultConnection" />
      </providers>
</sessionState> -->

Setelah langkah-langkah ini dilakukan, aplikasi Anda dikonfigurasi untuk menggunakan Penyedia Keadaan Sesi Redis Cache. Saat Anda menggunakan keadaan sesi di aplikasi Anda, sesi tersebut disimpan dalam instans Azure Cache for Redis.

Penting

Data yang disimpan dalam tembolokan harus dapat diserialisasikan, tidak seperti data yang dapat disimpan dalam memori default Penyedia Keadaan Sesi ASP.NET. Ketika Penyedia Keadaan Sesi untuk Redis digunakan, pastikan bahwa jenis data yang disimpan dalam keadaan sesi dapat diserialisasikan.

Opsi Keadaan Sesi ASP.NET

  • Di Penyedia Keadaan Sesi Memori - Penyedia ini menyimpan Keadaan Sesi di memori. Manfaat menggunakan penyedia ini adalah kesederhanaan dan kecepatan. Namun, Anda tidak dapat menskalakan Web Apps jika Anda menggunakan di penyedia memori karena tidak terdistribusikan.
  • Di Penyedia Keadaan Sesi Sql Server - Penyedia ini menyimpan Keadaan Sesi di Sql Server. Gunakan penyedia ini jika Anda ingin menyimpan Keadaan Sesi di penyimpanan persisten. Anda dapat menskalakan Web App Anda, tetapi menggunakan Sql Server untuk Sesi memiliki dampak performa pada Web App Anda. Anda juga dapat menggunakan penyedia ini dengan konfigurasi OLTP dalam Memori untuk membantu meningkatkan performa.
  • Penyedia Keadaan Sesi Memori Terdistribusi seperti Penyedia Keadaan Sesi Redis Cache - Penyedia ini memberi Anda yang terbaik dari kedua dunia. Web App Anda dapat memiliki Penyedia Keadaan Sesi yang sederhana, cepat, dan dapat diskalakan. Karena penyedia ini menyimpan keadaan Sesi di tembolokan, aplikasi Anda harus mempertimbangkan semua karakteristik terkait saat berbicara dengan tembolokan Terdistribusi Dalam Memori, seperti kegagalan jaringan sementara. Untuk praktik terbaik dalam menggunakan Cache, lihat Panduan penembolokan dari Microsoft Patterns &Practices Azure Cloud Application Design and Implementation Guidance.

Untuk informasi selengkapnya tentang keadaaan sesi dan praktik terbaik lainnya, lihat Praktik Terbaik Pengembangan Web (Membangun Real-World Cloud Apps dengan Azure).

Penyedia keadaan sesi pihak ketiga

Langkah berikutnya

Periksa Penyedia Tembolokan Output ASP.NET untuk Redis Cache.