Azure için Redis Cache için ASP.NET Çıkış Önbelleği Sağlayıcısı

Redis Çıktı Önbelleği Sağlayıcısı, çıktı önbelleği verileri için işlem dışı bir depolama mekanizmasıdır. Bu veriler özellikle tam HTTP yanıtlarına (sayfa çıktısı önbelleğe alma) yöneliktir. Sağlayıcı, ASP.NET 4'te tanıtılan yeni çıktı önbelleği sağlayıcısı genişletilebilirlik noktasına takılır.

ASP.NET Core uygulamaları için bkz. .NET 8'de Redis kullanarak ASP.NET çekirdekte çıkış Önbelleğe Alma.

Redis Çıktı Önbelleği Sağlayıcısı'nı kullanmak için önce önbelleğinizi yapılandırın ve ardından Redis Çıktı Önbelleği Sağlayıcısı NuGet paketini kullanarak ASP.NET uygulamanızı yapılandırın. Bu makalede, uygulamanızı Redis Çıktı Önbelleği Sağlayıcısı'nı kullanacak şekilde yapılandırma konusunda rehberlik sağlanır. Redis için Azure Cache örneği oluşturma ve yapılandırma hakkında daha fazla bilgi için bkz. Önbellek oluşturma.

Redis'te ASP.NET çekirdek sayfa çıkışını depolama

Tam özellik belirtimi için bkz . AS.NET çekirdek çıkış önbelleğe alma.

Kullanımı gösteren örnek uygulama için bkz. Redis Output Önbelleğe Alma ve Azure Open AI ile .NET 8 Web Uygulaması.

ASP.NET sayfa çıkışını Redis'te depolama

Visual Studio'da Redis için Azure Cache Oturum Durumu NuGet paketini kullanarak bir istemci uygulaması yapılandırmak için Araçlar menüsünden NuGet Paket Yöneticisi Paket Yöneticisi Konsolu'nu seçin.

Package Manager Console penceresinden aşağıdaki komutu çalıştırın:

Install-Package Microsoft.Web.RedisOutputCacheProvider

Redis Çıktı Önbelleği Sağlayıcısı NuGet paketinin StackExchange.Redis paketine bağımlılığı vardır. StackExchange.Redis paketi projenizde yoksa yüklenir. Redis Çıktı Önbelleği Sağlayıcısı NuGet paketi hakkında daha fazla bilgi için RedisOutputCacheProvider NuGet sayfasına bakın.

NuGet paketi, gerekli derleme başvurularını indirip ekler ve web.config dosyanıza aşağıdaki bölümü ekler. Bu bölüm, ASP.NET uygulamanızın Redis Çıktı Önbelleği Sağlayıcısı'nı kullanması için gerekli yapılandırmayı içerir.

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

İlk sütundaki öznitelikleri, Microsoft Azure portalında önbelleğinizdeki değerlerle yapılandırın. Ayrıca, istediğiniz diğer değerleri yapılandırın. Önbellek özelliklerinize erişme yönergeleri için bkz. Redis için Azure Cache ayarlarını yapılandırma.

Öznitelik Tür Varsayılan Açıklama
_Ana bilgisayar* Dize "localhost" Redis sunucusu IP adresi veya ana bilgisayar adı
bağlantı noktası pozitif tamsayı 6379 (TLS/SSL olmayan)
6380 (TLS/SSL)
Redis sunucu bağlantı noktası
Accesskey Dize "" Redis yetkilendirmesi etkinleştirildiğinde Redis sunucusu parolası. Değer varsayılan olarak boş bir dizedir ve bu da oturum durumu sağlayıcısının Redis sunucusuna bağlandığında herhangi bir parola kullanmadığı anlamına gelir. Redis sunucunuz Redis için Azure Cache gibi genel olarak erişilebilen bir ağdaysa güvenliği artırmak için Redis yetkilendirmesini etkinleştirdiğinizden ve güvenli bir parola sağladığınızdan emin olun.
Ssl boolean false TLS aracılığıyla Redis sunucusuna bağlanılıp bağlanılmayacağı. Redis varsayılan olarak TLS'i desteklemediğinden bu değer varsayılan olarak false değeridir. SSL'yi varsayılan olarak destekleyen Redis için Azure Cache kullanıyorsanız güvenliği artırmak için bu değeri true olarak ayarladığınızdan emin olun.

TLS olmayan bağlantı noktası, yeni önbellekler için varsayılan olarak devre dışıdır. TLS olmayan bağlantı noktasını kullanmak için bu ayar için true değerini belirtin. TLS olmayan bağlantı noktasını etkinleştirme hakkında daha fazla bilgi için Önbellek yapılandırma makalesindeki Erişim Bağlantı Noktaları bölümüne bakın.
databaseIdNumber pozitif tamsayı 0 Bu öznitelik yalnızca web.config veya App Ayarlar aracılığıyla belirtilebilir.

Hangi Redis veritabanının kullanılacağını belirtin.
connectionTimeoutInMilliseconds pozitif tamsayı StackExchange.Redis tarafından sağlanır StackExchange.Redis.Bağlan oluştururken Bağlan Timeout ayarlamak için kullanılırionMultiplexer.
operationTimeoutInMilliseconds pozitif tamsayı StackExchange.Redis tarafından sağlanır StackExchange.Redis.Bağlan oluşturulurken SyncTimeout'un ayarlanması için kullanılırionMultiplexer.
connectionString (Geçerli StackExchange.Redis bağlantı dizesi) Dize Yok App Ayarlar veya web.config için parametre başvurusu ya da geçerli bir StackExchange.Redis bağlantı dizesi. Bu öznitelik konak, bağlantı noktası, accessKey, ssl ve diğer StackExchange.Redis öznitelikleri için değerler sağlayabilir. connectionString'e daha yakından bakmak için Öznitelik notları bölümündeki ConnectionString'iayarlama bölümüne bakın.
settingsClassName
settingsMethodName
Dize
Dize
Yok Bu öznitelikler yalnızca web.config veya App Ayarlar aracılığıyla belirtilebilir.

Bağlantı dizesi sağlamak için bu öznitelikleri kullanın. _settingsClassName*, settingsMethodName tarafından belirtilen yöntemi içeren bir derleme nitelikli sınıf adı olmalıdır.

settingsMethodName tarafından belirtilen yöntem, dönüş türü dize olan public, static ve void (parametre kabul edilerek) olmalıdır. Bu yöntem gerçek bağlantı dizesi döndürür.
loggingClassName
loggingMethodName
Dize
Dize
Yok Bu öznitelikler yalnızca web.config veya App Ayarlar aracılığıyla belirtilebilir.

StackExchange.Redis günlükleriyle birlikte Oturum Durumu/Çıkış Önbelleği'nden günlükler sağlayarak uygulamanızda hata ayıklamak için bu öznitelikleri kullanın. loggingClassName, loggingMethodName tarafından belirtilen yöntemi içeren bir derleme nitelikli sınıf adı olmalıdır.

loggingMethodName tarafından belirtilen yöntem, dönüş türü System.IO.TextWriter olan public, static ve void (parametre kabul etme) olmalıdır.
Applicationname Dize Geçerli işlemin modül adı veya "/" Yalnızca SessionStateProvider
Bu öznitelik yalnızca web.config veya App Ayarlar aracılığıyla belirtilebilir.

Redis önbelleğinde kullanılacak uygulama adı ön eki. Müşteri farklı amaçlar için aynı Redis önbelleğini kullanabilir. Oturum anahtarlarının harmanlamadığından emin olmak için uygulama adı öneki eklenebilir.
Throwonerror boolean true Yalnızca SessionStateProvider
Bu öznitelik yalnızca web.config veya App Ayarlar aracılığıyla belirtilebilir.

Hata oluştuğunda özel durum oluşturup oluşturmama.

throwOnError hakkında daha fazla bilgi için Öznitelik notları bölümündeki throwOnError ile ilgili notlar bölümüne bakın.
retryTimeoutInMilliseconds pozitif tamsayı Kategori 5000 Yalnızca SessionStateProvider
Bu öznitelik yalnızca web.config veya App Ayarlar aracılığıyla belirtilebilir.

bir işlem başarısız olduğunda yeniden denemenin ne kadar süreceği. Bu değer operationTimeoutInMilliseconds değerinden küçükse sağlayıcı yeniden denemez.

retryTimeoutInMilliseconds hakkında daha fazla bilgi için Öznitelik notları bölümündeki RetryTimeoutInMilliseconds ile ilgili notlar bölümüne bakın.
redisSerializerType Dize Yok Microsoft.Web.Redis uygulayan bir sınıfın derleme türü adını belirtir. Seri hale getirici ve değerleri seri hale getirmek ve seri durumdan çıkarmak için özel mantığı içerir. Daha fazla bilgi için Öznitelik notları bölümündeki RedisSerializerType hakkında bölümüne bakın.

Öznitelik notları

connectionString'i ayarlama

ConnectionString değeri, App Ayarlar'da böyle bir dize varsa, app Ayarlar'dan gerçek bağlantı dizesi getirmek için anahtar olarak kullanılır. App Ayarlar içinde bulunamazsa, connectionString değeri web.config Bağlan ionString bölümünden gerçek bağlantı dizesi getirmek için anahtar olarak kullanılır (bu bölüm varsa). bağlantı dizesi App Ayarlar veya web.config Bağlan ionString bölümünde yoksa, StackExchange.Redis.Bağlan oluşturulurken bağlantı dizesi olarak connectionString değişmez değeri kullanılırionMultiplexer.

Aşağıdaki örneklerde connectionString'in nasıl kullanıldığı gösterilmektedir.

Örnek 1

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

içinde web.configanahtarı gerçek değer yerine parametre değeri olarak kullanın.

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

Örnek 2

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

içinde web.configanahtarı gerçek değer yerine parametre değeri olarak kullanın.

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

Örnek 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>

throwOnError ile ilgili notlar

Şu anda bir oturum işlemi sırasında bir hata oluşursa, oturum durumu sağlayıcısı bir özel durum oluşturur. Özel durum oluşturma, uygulamayı kapatır.

Bu davranış, mevcut ASP.NET oturum durumu sağlayıcısı kullanıcılarının beklentilerini destekleyen ve özel durumlar üzerinde işlem yapmanızı sağlayan bir şekilde değiştirildi. Diğer ASP.NET oturum durumu sağlayıcılarıyla tutarlı bir hata oluştuğunda varsayılan davranış yine de bir özel durum oluşturur. Mevcut kod öncekiyle aynı şekilde çalışmalıdır.

throwOnError değerini false olarak ayarlarsanız, hata oluştuğunda bir özel durum atmak yerine sessizce başarısız olur. Hata olup olmadığını görmek ve varsa özel durumun ne olduğunu bulmak için Microsoft.Web.Redis.RedisSessionStateProvider.LastException statik özelliğini denetleyin.

retryTimeoutInMilliseconds ile ilgili notlar

retryTimeoutInMilliseconds ayarı, bir ağ hatası veya başka bir şey nedeniyle bir oturum işleminin hata durumunda yeniden denemesi gereken durumu basitleştirmek için bazı mantık sağlar. retryTimeoutInMilliseconds ayarı, yeniden deneme zaman aşımını denetlemenize veya yeniden denemeyi tamamen geri çevirmenize de olanak tanır.

RetryTimeoutInMilliseconds değerini bir sayıya ayarlarsanız (örneğin, 2000), bir oturum işlemi başarısız olduğunda hata olarak kabul etmeden önce 2.000 milisaniye için yeniden denenir. Oturum durumu sağlayıcısının bu yeniden deneme mantığını uygulamasını sağlamak için zaman aşımını yapılandırmanız gerekir. İlk yeniden deneme 20 milisaniyeden sonra gerçekleşir ve bu, bir ağ hatası oluştuğunda çoğu durumda yeterlidir. Bundan sonra, zaman aşımına uğradıktan sonra her saniye yeniden dener. Zaman aşımından hemen sonra, zaman aşımını bir saniye kadar (en fazla) kesmediğinden emin olmak için bir kez daha yeniden dener.

Yeniden denemeniz gerekmediğini düşünüyorsanız veya yeniden deneme mantığını kendiniz işlemek istiyorsanız retryTimeoutInMilliseconds değerini 0 olarak ayarlayın. Örneğin, Redis sunucusunu uygulamanızla aynı makinede çalıştırırken yeniden denemek istemeyebilirsiniz.

redisSerializerType hakkında

Redis'te değerleri depolamak için serileştirme, binaryFormatter sınıfı tarafından sağlanan ikili biçimde varsayılan olarak yapılır. Microsoft.Web.Redis.ISerializer uygulayan ve değerleri seri hale getirmek ve seri durumdan çıkarmak için özel mantığa sahip bir sınıfın derleme türü adını belirtmek için redisSerializerType kullanın. Örneğin, JSON.NET kullanan bir Json seri hale getirici sınıfı aşağıda verilmişti:

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);
        }
    }
}

Bu sınıfın MyCompanyDll adlı bir derlemede tanımlandığını varsayarsak, bunu kullanmak için redisSerializerType parametresini ayarlayabilirsiniz:

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

Çıktı önbelleği yönergesi

Çıktıyı önbelleğe almak istediğiniz her sayfaya bir OutputCache yönergesi ekleyin.

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

Önceki örnekte, önbelleğe alınan sayfa verileri 60 saniye boyunca önbellekte kalır ve her parametre bileşimi için sayfanın farklı bir sürümü önbelleğe alınır. OutputCache yönergesi hakkında daha fazla bilgi için bkz . @OutputCache.

Bu adımları gerçekleştirdikten sonra uygulamanız Redis Çıktı Önbelleği Sağlayıcısı'nı kullanacak şekilde yapılandırılır.

Üçüncü taraf çıktı önbelleği sağlayıcıları

Redis için Azure Cache için ASP.NET Oturum Durumu Sağlayıcısı'na göz atın.