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 ASP.NET Core'da yanıt önbelleğe alma'yı okuyun.

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.

ASP.NET sayfa çıkışını önbellekte depolama

Visual Studio'da Redis için Azure Cache Oturum Durumu NuGet paketini kullanarak bir istemci uygulaması yapılandırmak için Araçlarmenü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>

Sol taraftaki öznitelikleri Microsoft Azure portal ö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 string "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 string "" Redis yetkilendirmesi etkinleştirildiğinde Redis sunucu 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 makalesinin Erişim Bağlantı Noktaları bölümüne bakın.
databaseIdNumber pozitif tamsayı 0 Bu öznitelik yalnızca web.config veya AppSettings aracılığıyla belirtilebilir.

Kullanılacak Redis veritabanını belirtin.
connectionTimeoutInMilliseconds pozitif tamsayı StackExchange.Redis tarafından sağlanır StackExchange.Redis.ConnectionMultiplexer oluşturulurken ConnectTimeout'u ayarlamak için kullanılır.
operationTimeoutInMilliseconds pozitif tamsayı StackExchange.Redis tarafından sağlanır StackExchange.Redis.ConnectionMultiplexer oluşturulurken SyncTimeout ayarlamak için kullanılır.
connectionString (Geçerli StackExchange.Redis bağlantı dizesi) string Yok AppSettings veya web.config için parametre başvurusu ya da başka bir durumda 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'i ayarlama bölümüne bakın.
settingsClassName
settingsMethodName
string
string
Yok Bu öznitelikler yalnızca web.config veya AppSettings 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 edilmeden) olmalıdır. Bu yöntem gerçek bağlantı dizesini döndürür.
loggingClassName
loggingMethodName
string
string
Yok Bu öznitelikler yalnızca web.config veya AppSettings aracılığıyla belirtilebilir.

StackExchange.Redis'ten gelen günlüklerle 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 string Geçerli işlemin modül adı veya "/" Yalnızca SessionStateProvider
Bu öznitelik yalnızca web.config veya AppSettings aracılığıyla belirtilebilir.

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

Hata oluştuğunda özel durum oluşturup oluşturmayacağınız.

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

İşlem başarısız olduğunda yeniden deneme süresi. 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 string 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 çıkarma için özel mantık içerir. Daha fazla bilgi için Özniteliknotları bölümündeki RedisSerializerType Hakkında bölümüne bakın.

Öznitelik notları

connectionString'i ayarlama

ConnectionString değeri, AppSettings'te böyle bir dize varsa AppSettings'ten gerçek bağlantı dizesini getirmek için anahtar olarak kullanılır. AppSettings içinde bulunamazsa connectionString değeri, connectionString bölümü varsa, web.config ConnectionString bölümünden gerçek bağlantı dizesini getirmek için anahtar olarak kullanılır. Bağlantı dizesi AppSettings veya web.config ConnectionString bölümünde yoksa, StackExchange.Redis.ConnectionMultiplexer oluşturulurken bağlantı dizesi olarak connectionString değişmez değeri kullanılır.

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.config, yukarıdaki anahtarı 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.config, yukarıdaki anahtarı 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 hata oluşursa, oturum durumu sağlayıcısı bir özel durum oluşturur. Özel durumun atılması uygulamayı kapatır.

Bu davranış, mevcut ASP.NET oturum durumu sağlayıcısı kullanıcılarının beklentilerini destekleyecek ve özel durumlar üzerinde işlem yapmanızı sağlayacak şekilde değiştirilmiştir. Varsayılan davranış, hata oluştuğunda diğer ASP.NET oturum durumu sağlayıcılarıyla tutarlı 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 özel durum oluşturma 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 2000 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, çoğu durumda ağ arızası olduğunda yeterli olur. Bundan sonra, zaman aşımına gelene kadar her saniye yeniden dener. Zaman aşımından hemen sonra, zaman aşımını bir saniye (en fazla) kesmediğinden emin olmak için bir kez daha yeniden dener.

Yeniden denemeniz gerektiğini düşünmü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. RedisSerializerType kullanarak Microsoft.Web.Redis.ISerializer uygulayan ve değerleri seri hale getirmek ve seri durumdan çıkarma için özel mantığa sahip bir sınıfın derleme türü adını belirtin. Örneğin, JSON.NET kullanan bir Json seri hale getirici sınıfı aşağıda verilmiştir:

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ı

Sonraki adımlar

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