ASP.NET Redis için Azure Cache için Çıktı Önbelleği Sağlayıcısı
Redis Çıkış Önbelleği Sağlayıcısı, çıktı önbelleği verileri için işlem dışı bir depolama mekanizmasıdır. Bu veriler tam HTTP yanıtları (sayfa çıktısını önbelleğe alma) için özel olarak kullanılır. Sağlayıcı, ASP.NET 4'te tanıtıldı yeni çıktı önbelleği sağlayıcı genişletilebilirlik noktasına takıyor. Uygulama ASP.NET Core için, ASP.NET Core'da yanıt önbelleğe alma makalesini okuyun.
Redis Çıkış Önbelleği Sağlayıcısını kullanmak için önce önbelleğinizi ve ardından Redis Çıkış ASP.NET Sağlayıcısı NuGet yapılandırmanız gerekir. Bu makalede, redis çıkış önbelleği sağlayıcısını kullanmak üzere uygulama yapılandırma hakkında rehberlik sağlar. Bir önbellek örneği oluşturma ve yapılandırma hakkında daha fazla Redis için Azure Cache için bkz. Önbellek oluşturma.
Sayfa ASP.NET önbellekte depolama
Redis için Azure Cache Session State NuGet paketini kullanarak Visual Studio istemci uygulamasını 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 Çıkış Önbelleği Sağlayıcısı NuGet StackExchange.Redis paketine bağımlılığı vardır. StackExchange.Redis paketi projenize dahil değilse yüklenir. Redis Çıkış Önbelleği Sağlayıcısı NuGet daha fazla bilgi için RedisOutputCacheProvider NuGet bakın.
Bu NuGet, gerekli derleme başvurularını indirir ve ekler ve aşağıdaki bölümü web.config ekler. Bu bölüm, redis çıkış önbelleği sağlayıcısını ASP.NET 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 tarafta, Microsoft Azure portalında önbelleğinizin değerleriyle Microsoft Azure yapılandırabilirsiniz. Ayrıca, istediğiniz diğer değerleri de yapılandırarak. Önbellek özelliklerinize erişme yönergeleri için bkz. Redis için Azure Cache yapılandırma.
| Öznitelik | Tür | Varsayılan | Description |
|---|---|---|---|
| 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ğlanırken parola kullanmay anlamına gelir. Redis sunucunuz Redis için Azure Cache gibi genel olarak erişilebilen bir ağ içinde yer aldıysanız, güvenliği artırmak için Redis yetkilendirmeyi etkinleştir ve güvenli bir parola sağla. |
| Ssl | boolean | False | TLS aracılığıyla Redis sunucusuna bağlanıp bağlanmayılacak. Redis varsayılan olarak TLS'yi desteklemey olduğundan bu değer varsayılan olarak false'tır. Varsayılan olarak SSL'yi Redis için Azure Cache bir kimlik doğrulamasını kullanıyorsanız, güvenliği artırmak için bu değeri true olarak ayarlamalısınız. 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 belirtin. TLS olmayan bağlantı noktasını etkinleştirme hakkında daha fazla bilgi için Önbellek yapılandırma makalesinde Erişim Bağlantı Noktaları bölümüne bakın. |
| databaseIdNumber | pozitif tamsayı | 0 | Bu öznitelik yalnızca uygulama veya AppSettings web.config belirtilebilir. Hangi Redis veritabanının kullanılamayacaklarını belirtin. |
| connectionTimeoutInMilliseconds | pozitif tamsayı | StackExchange.Redis tarafından sağlanan | StackExchange.Redis.ConnectionMultiplexer oluşturulurken ConnectTimeout ayarlamak için kullanılır. |
| operationTimeoutInMilliseconds | pozitif tamsayı | StackExchange.Redis tarafından sağlanan | StackExchange.Redis.ConnectionMultiplexer oluşturulurken SyncTimeout ayarlamak için kullanılır. |
| connectionString (Geçerli StackExchange.Redis bağlantı dizesi) | string | Yok | AppSettings'e parametre başvurusu veya web.config veya başka bir geçerli StackExchange.Redis bağlantı dizesi. Bu öznitelik konak, bağlantı noktası, accessKey, ssl ve diğer StackExchange.Redis öznitelikleri için değerler sağlar. 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 uygulama veya AppSettings web.config belirtilebilir. Bağlantı dizesi sağlamak için bu öznitelikleri kullanın. settingsClassName, settingsMethodName tarafından belirtilen yöntemi içeren bir derleme tam sınıf adı olması gerekir. settingsMethodName tarafından belirtilen yöntem genel, statik ve void olmalıdır (parametre kabul etmez), dönüş türü dize olmalıdır. Bu yöntem gerçek bağlantı dizesini döndürür. |
| loggingClassName loggingMethodName |
string string |
Yok | Bu öznitelikler yalnızca uygulama veya AppSettings web.config belirtilebilir. Oturum Durumu/Çıktı Önbelleği'nin günlüklerini StackExchange.Redis günlükleriyle birlikte sağlayarak uygulamanıza 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ı olması gerekir. loggingMethodName tarafından belirtilen yöntem public, static ve void olmalıdır (parametre kabul etmez), dönüş türü System.IO.TextWriter olmalıdır. |
| Applicationname | string | Geçerli sürecin modül adı veya "/" | Yalnızca SessionStateProvider Bu öznitelik yalnızca uygulama veya AppSettings web.config belirtilebilir. Redis önbelleğinde kullanmak için uygulama adı ön eki. Müşteri aynı Redis önbelleğini farklı amaçlarla kullanabilir. Oturum anahtarlarının harmanlamamalarını sağlarken, uygulama adı ile ön eke sahip olabilir. |
| Throwonerror | boolean | true | Yalnızca SessionStateProvider Bu öznitelik yalnızca uygulama veya AppSettings web.config belirtilebilir. Bir hata oluştuğunda özel durum oluşturulup oluşturulmayacağını belirtir. ThrowOnError hakkında daha fazla bilgi Için, öznitelik notları bölümünde throwOnError 'teki notlar bölümüne bakın. |
| Retrytimeoutınmilliseconds | pozitif tamsayı | 5000 | Yalnızca SessionStateProvider Bu öznitelik yalnızca web.config ya da AppSettings aracılığıyla belirtilebilir. Bir işlem başarısız olduğunda yeniden denenme süresini. Bu değer Operationtimeoutınmilliseconds değerinden küçükse, sağlayıcı yeniden denenmez. Retrytimeoutınmilliseconds hakkında daha fazla bilgi için bkz. öznitelik notları bölümünde retrytimeoutınmilliseconds hakkında notlar . |
| redisSerializerType | string | yok | Microsoft. Web. Reddir uygulayan bir sınıfın derleme nitelikli tür adını belirtir. Serileştirici 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ünde Redisserializertype hakkında bölümüne bakın. |
Öznitelik notları
ConnectionString ayarlanıyor
ConnectionString 'in değeri, appSettings içinde bu tür bir dize varsa, appSettings 'ten gerçek bağlantı dizesini getirmek için anahtar olarak kullanılır. AppSettings içinde bulunmazsa, ConnectionString değeri web.config ConnectionString bölümünden gerçek bağlantı dizesini getirmek için anahtar olarak kullanılır, bu bölüm varsa. Bağlantı dizesi AppSettings 'de veya web.config ConnectionString bölümünde yoksa, StackExchange. redsıs. connectionçoğullayıcı oluşturulurken bağlantı dizesi olarak ConnectionString öğesinin sabit değeri kullanılacaktı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>
' De 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.RedisSessionStateProvide"
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>
' De 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.RedisSessionStateProvide"
name = "MySessionStateStore"
connectionString = "MyRedisConnectionString"/>
</providers>
</sessionState>
Örnek 3
<sessionState mode="Custom" customProvider="MySessionStateStore">
<providers>
<add type = "Microsoft.Web.Redis.RedisSessionStateProvide"
name = "MySessionStateStore"
connectionString = "mycache.redis.cache.windows.net:6380,password=actual access key,ssl=True,abortConnect=False"/>
</providers>
</sessionState>
ThrowOnError hakkındaki 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 durumu oluşturmak uygulamayı kapatır.
bu davranış, mevcut ASP.NET oturum durumu sağlayıcısı kullanıcılarının beklentilerini destekleyen bir şekilde değiştirilmiştir ve aynı zamanda özel durumlar üzerinde işlem yapmanızı sağlar. varsayılan davranış yine bir hata oluştuğunda, diğer ASP.NET oturum durumu sağlayıcılarıyla tutarlı bir özel durum oluşturur. Mevcut kod, önceki ile aynı şekilde çalışmalıdır.
ThrowOnError değerini false olarak ayarlarsanız bir hata oluştuğunda özel durum oluşturmak yerine sessizce başarısız olur. Bir hata olup olmadığını görmek için, özel durumun ne olduğunu bulun, Microsoft. Web. redsıs. RedisSessionStateProvider. LastException statik özelliğini denetleyin.
Retrytimeoutınmilliseconds üzerine notlar
Retrytimeoutınmilliseconds ayarı bir ağ hatası veya başka bir şey nedeniyle bir oturum işleminin hata durumunda yeniden deneneceği durumu basitleştirmek için bazı mantık sağlar. Retrytimeoutınmilliseconds ayarı, yeniden deneme zaman aşımını denetlemenize veya yeniden denememeyi tamamen devre dışı bırakmanıza olanak tanır.
Retrytimeoutınmilliseconds ' ı bir sayıya ayarlarsanız, örneğin 2000, bir oturum işlemi başarısız olduğunda, bir hata olarak davranmadan önce 2000 milisaniyeye yeniden dener. Oturum durumu sağlayıcısı 'nın bu yeniden deneme mantığını uygulaması için zaman aşımını yapılandırmanız yeterlidir. İlk yeniden deneme 20 milisaniyelik sonra gerçekleşecektir, bu da çoğu durumda bir ağ hatası oluştuğunda yeterlidir. Bundan sonra, zaman aşımına uğrayana kadar her saniye yeniden dener. Zaman aşımından hemen sonra, zaman aşımını (en fazla) bir saniye kesmeyeceği için bir kez daha yeniden dener.
Yeniden deneme gerektiğini düşünmezseniz veya yeniden deneme mantığını kendiniz işlemek istiyorsanız, Retrytimeoutınmilliseconds ' ı 0 olarak ayarlayın. Örneğin, Redsıs sunucusunu uygulamanızla aynı makinede çalıştırırken yeniden denemek istemeyebilirsiniz.
Redisserializertype hakkında
Değerleri redin üzerinde depolamak için serileştirme, varsayılan olarak BinaryFormatter sınıfı tarafından belirtilen ikili biçimde yapılır. Microsoft. Web. Red. ISerializer uygulayan bir sınıfın derleme nitelikli tür adını belirtmek Için redisserializertype kullanın ve değerleri seri hale getirmek ve seri durumdan çıkarmak için özel mantık vardır. Örneğin, JSON.NET kullanarak bir JSON serileştirici 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, parametresini 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 sayfanın farklı bir sürümü her bir parametre birleşimi için önbelleğe alınır. OutputCache yönergesi hakkında daha fazla bilgi için bkz @OutputCache ..
Bu adımları uyguladıktan sonra, uygulamanız Redsıs çıkış önbelleği sağlayıcısını kullanacak şekilde yapılandırılır.
Üçüncü taraf çıkış önbelleği sağlayıcıları
Sonraki adımlar
redsıs için Azure önbelleği ASP.NET oturum durumu sağlayıcısınagöz atın.