Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
using System;
using System.Net;
using System.Threading.Tasks;
using StackExchange.Redis.Maintenance;

namespace StackExchange.Redis.Configuration
{
/// <summary>
/// Options provider for Azure Managed Redis environments.
/// </summary>
public class AzureManagedRedisOptionsProvider : DefaultOptionsProvider
{
/// <summary>
/// Allow connecting after startup, in the cases where remote cache isn't ready or is overloaded.
/// </summary>
public override bool AbortOnConnectFail => false;

/// <summary>
/// The minimum version of Redis in Azure Managed Redis is 7.4, so use the widest set of available commands when connecting.
/// </summary>
public override Version DefaultVersion => RedisFeatures.v7_4_0;

private static readonly string[] azureManagedRedisDomains =
[
".redis.azure.net",
".redis.chinacloudapi.cn",
".redis.usgovcloudapi.net",
];

/// <inheritdoc/>
public override bool IsMatch(EndPoint endpoint)
{
if (endpoint is DnsEndPoint dnsEp && IsHostInDomains(dnsEp.Host, azureManagedRedisDomains))
{
return true;
}

return false;
}

private bool IsHostInDomains(string hostName, string[] domains)
{
foreach (var domain in domains)
{
if (hostName.EndsWith(domain, StringComparison.InvariantCultureIgnoreCase))
{
return true;
}
}

return false;
}

/// <inheritdoc/>
public override Task AfterConnectAsync(ConnectionMultiplexer muxer, Action<string> log)
=> AzureMaintenanceEvent.AddListenerAsync(muxer, log);

/// <inheritdoc/>
public override bool GetDefaultSsl(EndPointCollection endPoints) => true;
}
}
18 changes: 2 additions & 16 deletions src/StackExchange.Redis/Configuration/AzureOptionsProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,22 +32,12 @@ public class AzureOptionsProvider : DefaultOptionsProvider
".redisenterprise.cache.azure.net",
};

private static readonly string[] azureManagedRedisDomains = new[]
{
".redis.azure.net",
".redis.chinacloudapi.cn",
".redis.usgovcloudapi.net",
};

/// <inheritdoc/>
public override bool IsMatch(EndPoint endpoint)
{
if (endpoint is DnsEndPoint dnsEp)
if (endpoint is DnsEndPoint dnsEp && IsHostInDomains(dnsEp.Host, azureRedisDomains))
{
if (IsHostInDomains(dnsEp.Host, azureRedisDomains) || IsHostInDomains(dnsEp.Host, azureManagedRedisDomains))
{
return true;
}
return true;
}

return false;
Expand Down Expand Up @@ -82,10 +72,6 @@ public override bool GetDefaultSsl(EndPointCollection endPoints)
{
return true;
}
if (dns.Port == 10000 && IsHostInDomains(dns.Host, azureManagedRedisDomains))
{
return true; // SSL is enabled by default on AMR caches
}
break;
case IPEndPoint ip:
if (ip.Port == 6380)
Expand Down
7 changes: 7 additions & 0 deletions src/StackExchange.Redis/PublicAPI/PublicAPI.Shipped.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ override StackExchange.Redis.Configuration.AzureOptionsProvider.AfterConnectAsyn
override StackExchange.Redis.Configuration.AzureOptionsProvider.DefaultVersion.get -> System.Version!
override StackExchange.Redis.Configuration.AzureOptionsProvider.GetDefaultSsl(StackExchange.Redis.EndPointCollection! endPoints) -> bool
override StackExchange.Redis.Configuration.AzureOptionsProvider.IsMatch(System.Net.EndPoint! endpoint) -> bool
override StackExchange.Redis.Configuration.AzureManagedRedisOptionsProvider.AbortOnConnectFail.get -> bool
override StackExchange.Redis.Configuration.AzureManagedRedisOptionsProvider.AfterConnectAsync(StackExchange.Redis.ConnectionMultiplexer! muxer, System.Action<string!>! log) -> System.Threading.Tasks.Task!
override StackExchange.Redis.Configuration.AzureManagedRedisOptionsProvider.DefaultVersion.get -> System.Version!
override StackExchange.Redis.Configuration.AzureManagedRedisOptionsProvider.GetDefaultSsl(StackExchange.Redis.EndPointCollection! endPoints) -> bool
override StackExchange.Redis.Configuration.AzureManagedRedisOptionsProvider.IsMatch(System.Net.EndPoint! endpoint) -> bool
override StackExchange.Redis.ConfigurationOptions.ToString() -> string!
override StackExchange.Redis.ConnectionCounters.ToString() -> string!
override StackExchange.Redis.ConnectionFailedEventArgs.ToString() -> string!
Expand Down Expand Up @@ -199,6 +204,8 @@ StackExchange.Redis.ConditionResult
StackExchange.Redis.ConditionResult.WasSatisfied.get -> bool
StackExchange.Redis.Configuration.AzureOptionsProvider
StackExchange.Redis.Configuration.AzureOptionsProvider.AzureOptionsProvider() -> void
StackExchange.Redis.Configuration.AzureManagedRedisOptionsProvider
StackExchange.Redis.Configuration.AzureManagedRedisOptionsProvider.AzureManagedRedisOptionsProvider() -> void
StackExchange.Redis.Configuration.DefaultOptionsProvider
StackExchange.Redis.Configuration.DefaultOptionsProvider.ClientName.get -> string!
StackExchange.Redis.Configuration.DefaultOptionsProvider.DefaultOptionsProvider() -> void
Expand Down
1 change: 1 addition & 0 deletions src/StackExchange.Redis/RedisFeatures.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ namespace StackExchange.Redis
v7_2_0_rc1 = new Version(7, 1, 240), // 7.2 RC1 is version 7.1.240
v7_4_0_rc1 = new Version(7, 3, 240), // 7.4 RC1 is version 7.3.240
v7_4_0_rc2 = new Version(7, 3, 241), // 7.4 RC2 is version 7.3.241
v7_4_0 = new Version(7, 4, 0),
v8_0_0_M04 = new Version(7, 9, 227), // 8.0 M04 is version 7.9.227
v8_2_0_rc1 = new Version(8, 1, 240), // 8.2 RC1 is version 8.1.240
v8_4_0_rc1 = new Version(8, 3, 224); // 8.4 RC1 is version 8.3.224
Expand Down
Loading