azure-resource-manager-redis-dotnet
microsoft/skills
Gestiona instancias de Azure Cache for Redis mediante el SDK de .NET de Azure Resource Manager, incluyendo la creación, las reglas de cortafuegos, las claves de acceso, las programaciones de parches, la replicación geográfica y los puntos de conexión privados.
...Expandir todoAzure.ResourceManager.Redis (.NET)
SDK del plano de gestión para el aprovisionamiento y la gestión de recursos de Azure Cache for Redis a través de Azure Resource Manager.
⚠️ Plano de gestión frente a plano de datos
- Este SDK (Azure.ResourceManager.Redis): crea cachés, configura reglas de firewall, gestiona claves de acceso y configura la replicación geográfica
- SDK del plano de datos (StackExchange.Redis): obtener/establecer claves, pub/sub, flujos, scripts de Lua
Instalación
dotnet add package Azure.ResourceManager.Redis
dotnet add package Azure.Identity
Versión actual: 1.5.1 (estable)
Versión de la API: 2024-11-01
Marcos de trabajo de destino: .NET 8.0, .NET Standard 2.0
Variables de entorno
AZURE_SUBSCRIPTION_ID= # Obligatorio: ID de suscripción de Azure
AZURE_TOKEN_CREDENTIALS=prod # Obligatorio solo si se utiliza DefaultAzureCredential en producción
AZURE_TENANT_ID= # Para la autenticación mediante entidad de servicio (opcional)
AZURE_CLIENT_ID= # Para la autenticación mediante entidad de servicio (opcional)
AZURE_CLIENT_SECRET= # Para la autenticación mediante entidad de servicio (opcional)
Autenticación
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Redis;
// Desarrollo local: DefaultAzureCredential. Producción: establece AZURE_TOKEN_CREDENTIALS=prod o AZURE_TOKEN_CREDENTIALS=
var credential = new DefaultAzureCredential(
DefaultAzureCredential.DefaultEnvironmentVariableName
);
// O bien, utiliza una credencial específica directamente en producción:
// Véase https://learn.microsoft.com/dotnet/api/overview/azure/identity-readme?view=azure-dotnet#credential-classes
// var credential = new ManagedIdentityCredential();
var armClient = new ArmClient(credential);
// Obtener la suscripción
var subscriptionId = Environment.GetEnvironmentVariable("AZURE_SUBSCRIPTION_ID");
var subscription = armClient.GetSubscriptionResource(
new ResourceIdentifier($"/subscriptions/{subscriptionId}"));
Jerarquía de recursos
ArmClient
└── SubscriptionResource
└── ResourceGroupResource
└── RedisResource
├── RedisFirewallRuleResource
├── RedisPatchScheduleResource
├── RedisLinkedServerWithPropertyResource
├── RedisPrivateEndpointConnectionResource
└── RedisCacheAccessPolicyResource
Flujos de trabajo principales
1. Crear caché de Redis
using Azure.ResourceManager.Redis;
using Azure.ResourceManager.Redis.Models;
// Obtener el grupo de recursos
var resourceGroup = await subscription
.GetResourceGroupAsync("my-resource-group");
// Definir la configuración de la caché
var cacheData = new RedisCreateOrUpdateContent(
location: AzureLocation.EastUS,
sku: new RedisSku(RedisSkuName.Standard, RedisSkuFamily.BasicOrStandard, 1))
{
EnableNonSslPort = false,
MinimumTlsVersion = RedisTlsVersion.Tls1_2,
RedisConfiguration = new RedisCommonConfiguration
{
MaxMemoryPolicy = "volatile-lru"
},
Tags =
{
["environment"] = "production"
}
};
// Crear caché (operación de larga duración)
var cacheCollection = resourceGroup.Value.GetAllRedis();
var operación = await colecciónDeCaché.CreateOrUpdateAsync(
WaitUntil.Completed,
"my-redis-cache",
datosDeCaché);
RedisResource caché = operación.Value;
Console.WriteLine($"Caché creada: {caché.Data.HostName}");
2. Obtener la caché de Redis
// Obtener la caché existente
var cache = await resourceGroup.Value
.GetRedisAsync("my-redis-cache");
Console.WriteLine($"Host: {cache.Value.Data.HostName}");
Console.WriteLine($"Puerto: {cache.Value.Data.Port}");
Console.WriteLine($"Puerto SSL: {cache.Value.Data.SslPort}");
Console.WriteLine($"Estado de aprovisionamiento: {cache.Value.Data.ProvisioningState}");
3. Actualizar la caché de Redis
var patchData = new RedisPatch
{
Sku = new RedisSku(RedisSkuName.Standard, RedisSkuFamily.BasicOrStandard, 2),
RedisConfiguration = new RedisCommonConfiguration
{
MaxMemoryPolicy = "allkeys-lru"
}
};
var updateOperation = await cache.Value.UpdateAsync(
WaitUntil.Completed,
patchData);
4. Eliminar la caché de Redis
await cache.Value.DeleteAsync(WaitUntil.Completed);
5. Obtener claves de acceso
var keys = await cache.Value.GetKeysAsync();
Console.WriteLine($"Clave principal: {keys.Value.PrimaryKey}");
Console.WriteLine($"Clave secundaria: {keys.Value.SecondaryKey}");
6. Regenerar claves de acceso
var regenerateContent = new RedisRegenerateKeyContent(RedisRegenerateKeyType.Primary);
var newKeys = await cache.Value.RegenerateKeyAsync(regenerateContent);
Console.WriteLine($"Nueva clave primaria: {newKeys.Value.PrimaryKey}");
7. Gestionar reglas de cortafuegos
// Crear regla de cortafuegos
var firewallData = new RedisFirewallRuleData(
startIP: System.Net.IPAddress.Parse("10.0.0.1"),
endIP: System.Net.IPAddress.Parse("10.0.0.255"));
var firewallCollection = cache.Value.GetRedisFirewallRules();
var firewallOperation = await firewallCollection.CreateOrUpdateAsync(
WaitUntil.Completed,
"allow-internal-network",
firewallData);
// Mostrar todas las reglas del cortafuegos
await foreach (var rule in firewallCollection.GetAllAsync())
{
Console.WriteLine($"Regla: {rule.Data.Name} ({rule.Data.StartIP} - {rule.Data.EndIP})");
}
// Eliminar una regla de cortafuegos
var ruleToDelete = await firewallCollection.GetAsync("allow-internal-network");
await ruleToDelete.Value.DeleteAsync(WaitUntil.Completed);
8. Configurar la programación de parches (SKU Premium)
// Las programaciones de parches requieren la SKU Premium
var scheduleData = new RedisPatchScheduleData(
new[]
{
new RedisPatchScheduleSetting(RedisDayOfWeek.Saturday, 2) // 2:00 de la madrugada del sábado
{
MaintenanceWindow = TimeSpan.FromHours(5)
},
new RedisPatchScheduleSetting(RedisDayOfWeek.Sunday, 2) // 2:00 a. m. del domingo
{
MaintenanceWindow = TimeSpan.FromHours(5)
}
});
var collectionDeProgramaciones = cache.Value.GetRedisPatchSchedules();
await collectionDeProgramaciones.CreateOrUpdateAsync(
WaitUntil.Completed,
RedisPatchScheduleDefaultName.Default,
datosDeProgramación);
9. Importación/exportación de datos (SKU Premium)
// Importar datos desde el almacenamiento de blobs
var importContent = new ImportRdbContent(
files: new[] { "https://mystorageaccount.blob.core.windows.net/container/dump.rdb" },
format: "RDB");
await cache.Value.ImportDataAsync(WaitUntil.Completed, importContent);
// Exportar datos al almacenamiento de blobs
var exportContent = new ExportRdbContent(
prefix: "backup",
container: "https://mystorageaccount.blob.core.windows.net/container?sastoken",
format: "RDB");
await cache.Value.ExportDataAsync(WaitUntil.Completed, exportContent);
10. Reinicio forzado
var rebootContent = new RedisRebootContent
{
RebootType = RedisRebootType.AllNodes,
ShardId = 0 // Para cachés en clúster
};
await cache.Value.ForceRebootAsync(rebootContent);
Referencia de SKU
| SKU | Familia | Capacidad | Características |
|---|---|---|---|
| Básico | C | 0-6 | Un solo nodo, sin SLA, solo para desarrollo y pruebas |
| Estándar | C | 0-6 | Dos nodos (primario/réplica), SLA |
| Premium | P | 1-5 | Clústeres, replicación geográfica, VNet, persistencia |
Tamaños de capacidad (Familia C - Básica/Estándar):
- C0: 250 MB
- C1: 1 GB
- C2: 2,5 GB
- C3: 6 GB
- C4: 13 GB
- C5: 26 GB
- C6: 53 GB
Tamaños de capacidad (Familia P - Premium):
- P1: 6 GB por fragmento
- P2: 13 GB por fragmento
- P3: 26 GB por fragmento
- P4: 53 GB por fragmento
- P5: 120 GB por fragmento
Referencia de tipos de clave
| Tipo | Finalidad |
|---|---|
ArmClient |
Punto de entrada para todas las operaciones de ARM |
RedisResource |
Representa una instancia de caché de Redis |
RedisCollection |
Colección para operaciones CRUD de caché |
RedisFirewallRuleResource |
Regla de cortafuegos para el filtrado de direcciones IP |
RedisPatchScheduleResource |
Configuración de la ventana de mantenimiento |
RedisLinkedServerWithPropertyResource |
Servidor vinculado con replicación geográfica |
Recurso de conexión a punto final privado de Redis |
Conexión de punto final privado |
Recurso de política de acceso a la caché de Redis |
Política de acceso RBAC |
RedisCreateOrUpdateContent |
Carga útil de creación de caché |
RedisPatch |
Carga útil de actualización de caché |
RedisSku |
Configuración de SKU (nombre, familia, capacidad) |
RedisAccessKeys |
Claves de acceso primaria y secundaria |
Contenido de la regeneración de claves de Redis |
Solicitud de regeneración de claves |
Prácticas recomendadas
- Utiliza
WaitUntil.Completedpara las operaciones que deben finalizar antes de continuar - Utiliza
WaitUntil.Startedcuando quieras realizar un sondeo manualmente o ejecutar operaciones en paralelo - Utilice siempre
DefaultAzureCredential; nunca codifique claves de forma estática - Gestiona la excepción
RequestFailedExceptionen caso de errores de la API de ARM - Utiliza
CreateOrUpdateAsyncpara operaciones idempotentes - Navega por la jerarquía mediante los métodos
Get*(por ejemplo,cache.GetRedisFirewallRules()) - Utiliza la SKU Premium para cargas de trabajo de producción que requieran replicación geográfica, clústeres o persistencia
- Habilita como mínimo TLS 1.2: establece
MinimumTlsVersion = RedisTlsVersion.Tls1_2 - Desactivar el puerto no SSL: establecer
EnableNonSslPort = falsepor motivos de seguridad - Rota las claves periódicamente: utiliza
RegenerateKeyAsyncy actualiza las cadenas de conexión
Gestión de errores
using Azure;
try
{
var operation = await cacheCollection.CreateOrUpdateAsync(
WaitUntil.Completed, cacheName, cacheData);
}
catch (RequestFailedException ex) when (ex.Status == 409)
{
Console.WriteLine("La caché ya existe");
}
catch (RequestFailedException ex) when (ex.Status == 400)
{
Console.WriteLine($"Configuración no válida: {ex.Message}");
}
catch (RequestFailedException ex)
{
Console.WriteLine($"Error de ARM: {ex.Status} - {ex.ErrorCode}: {ex.Message}");
}
Errores habituales
- No se permiten cambios a un nivel inferior de SKU: no se puede pasar de Premium a Standard/Basic
- La agrupación en clústeres requiere laSKU Premium: la configuración de fragmentos solo está disponible en la SKU Premium
- La replicación geográfica requiere la versión Premium: los servidores vinculados solo funcionan con cachés Premium
- La inyección de VNet requiere el plan Premium: la compatibilidad con redes virtuales solo está disponible en el plan Premium
- Las programaciones de parches requieren el plan Premium: las ventanas de mantenimiento solo se pueden configurar en el plan Premium
- El nombre de la caché debe ser único a nivel global: los nombres de las cachés de Redis deben ser únicos en todas las suscripciones de Azure
- Tiempos de aprovisionamiento prolongados: la creación de la caché puede tardar entre 15 y 20 minutos; utiliza
WaitUntil.Startedpara patrones asíncronos
Conexión con StackExchange.Redis (plano de datos)
Tras crear la caché con este SDK de gestión, utiliza StackExchange.Redis para las operaciones con datos:
using StackExchange.Redis;
// Obtener la información de conexión del SDK de gestión
var cache = await resourceGroup.Value.GetRedisAsync("my-redis-cache");
var keys = await cache.Value.GetKeysAsync();
// Conectarse a StackExchange.Redis
var connectionString = $"{cache.Value.Data.HostName}:{cache.Value.Data.SslPort},password={keys.Value.PrimaryKey},ssl=True,abortConnect=False";
var connection = ConnectionMultiplexer.Connect(connectionString);
var db = connection.GetDatabase();
// Operaciones con datos
await db.StringSetAsync("key", "value");
var value = await db.StringGetAsync("key");
SDK relacionados
| SDK | Finalidad | Instalar |
|---|---|---|
StackExchange.Redis |
Plano de datos (get/set, pub/sub, flujos) | dotnet add package StackExchange.Redis |
Azure.ResourceManager.Redis |
Plano de gestión (este SDK) | dotnet add package Azure.ResourceManager.Redis |
Microsoft.Azure.StackExchangeRedis |
Extensiones de Redis específicas de Azure | dotnet add package Microsoft.Azure.StackExchangeRedis |
---
name: azure-resource-manager-redis-dotnet
description: Manage Azure Cache for Redis instances via the Azure Resource Manager .NET SDK, including creation, firewall rules, access keys, patch schedules, geo-replication, and private endpoints.
license: MIT
---
# Azure.ResourceManager.Redis (.NET)
Management plane SDK for provisioning and managing Azure Cache for Redis resources via Azure Resource Manager.
> **⚠️ Management vs Data Plane**
> - **This SDK (Azure.ResourceManager.Redis)**: Create caches, configure firewall rules, manage access keys, set up geo-replication
> - **Data Plane SDK (StackExchange.Redis)**: Get/set keys, pub/sub, streams, Lua scripts
## Installation
```bash
dotnet add package Azure.ResourceManager.Redis
dotnet add package Azure.Identity
```
**Current Version**: 1.5.1 (Stable)
**API Version**: 2024-11-01
**Target Frameworks**: .NET 8.0, .NET Standard 2.0
## Environment Variables
```bash
AZURE_SUBSCRIPTION_ID=<your-subscription-id> # Required: Azure subscription ID
AZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in production
AZURE_TENANT_ID=<tenant-id> # For service principal auth (optional)
AZURE_CLIENT_ID=<client-id> # For service principal auth (optional)
AZURE_CLIENT_SECRET=<client-secret> # For service principal auth (optional)
```
## Authentication
```csharp
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Redis;
// Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>
var credential = new DefaultAzureCredential(
DefaultAzureCredential.DefaultEnvironmentVariableName
);
// Or use a specific credential directly in production:
// See https://learn.microsoft.com/dotnet/api/overview/azure/identity-readme?view=azure-dotnet#credential-classes
// var credential = new ManagedIdentityCredential();
var armClient = new ArmClient(credential);
// Get subscription
var subscriptionId = Environment.GetEnvironmentVariable("AZURE_SUBSCRIPTION_ID");
var subscription = armClient.GetSubscriptionResource(
new ResourceIdentifier($"/subscriptions/{subscriptionId}"));
```
## Resource Hierarchy
```
ArmClient
└── SubscriptionResource
└── ResourceGroupResource
└── RedisResource
├── RedisFirewallRuleResource
├── RedisPatchScheduleResource
├── RedisLinkedServerWithPropertyResource
├── RedisPrivateEndpointConnectionResource
└── RedisCacheAccessPolicyResource
```
## Core Workflows
### 1. Create Redis Cache
```csharp
using Azure.ResourceManager.Redis;
using Azure.ResourceManager.Redis.Models;
// Get resource group
var resourceGroup = await subscription
.GetResourceGroupAsync("my-resource-group");
// Define cache configuration
var cacheData = new RedisCreateOrUpdateContent(
location: AzureLocation.EastUS,
sku: new RedisSku(RedisSkuName.Standard, RedisSkuFamily.BasicOrStandard, 1))
{
EnableNonSslPort = false,
MinimumTlsVersion = RedisTlsVersion.Tls1_2,
RedisConfiguration = new RedisCommonConfiguration
{
MaxMemoryPolicy = "volatile-lru"
},
Tags =
{
["environment"] = "production"
}
};
// Create cache (long-running operation)
var cacheCollection = resourceGroup.Value.GetAllRedis();
var operation = await cacheCollection.CreateOrUpdateAsync(
WaitUntil.Completed,
"my-redis-cache",
cacheData);
RedisResource cache = operation.Value;
Console.WriteLine($"Cache created: {cache.Data.HostName}");
```
### 2. Get Redis Cache
```csharp
// Get existing cache
var cache = await resourceGroup.Value
.GetRedisAsync("my-redis-cache");
Console.WriteLine($"Host: {cache.Value.Data.HostName}");
Console.WriteLine($"Port: {cache.Value.Data.Port}");
Console.WriteLine($"SSL Port: {cache.Value.Data.SslPort}");
Console.WriteLine($"Provisioning State: {cache.Value.Data.ProvisioningState}");
```
### 3. Update Redis Cache
```csharp
var patchData = new RedisPatch
{
Sku = new RedisSku(RedisSkuName.Standard, RedisSkuFamily.BasicOrStandard, 2),
RedisConfiguration = new RedisCommonConfiguration
{
MaxMemoryPolicy = "allkeys-lru"
}
};
var updateOperation = await cache.Value.UpdateAsync(
WaitUntil.Completed,
patchData);
```
### 4. Delete Redis Cache
```csharp
await cache.Value.DeleteAsync(WaitUntil.Completed);
```
### 5. Get Access Keys
```csharp
var keys = await cache.Value.GetKeysAsync();
Console.WriteLine($"Primary Key: {keys.Value.PrimaryKey}");
Console.WriteLine($"Secondary Key: {keys.Value.SecondaryKey}");
```
### 6. Regenerate Access Keys
```csharp
var regenerateContent = new RedisRegenerateKeyContent(RedisRegenerateKeyType.Primary);
var newKeys = await cache.Value.RegenerateKeyAsync(regenerateContent);
Console.WriteLine($"New Primary Key: {newKeys.Value.PrimaryKey}");
```
### 7. Manage Firewall Rules
```csharp
// Create firewall rule
var firewallData = new RedisFirewallRuleData(
startIP: System.Net.IPAddress.Parse("10.0.0.1"),
endIP: System.Net.IPAddress.Parse("10.0.0.255"));
var firewallCollection = cache.Value.GetRedisFirewallRules();
var firewallOperation = await firewallCollection.CreateOrUpdateAsync(
WaitUntil.Completed,
"allow-internal-network",
firewallData);
// List all firewall rules
await foreach (var rule in firewallCollection.GetAllAsync())
{
Console.WriteLine($"Rule: {rule.Data.Name} ({rule.Data.StartIP} - {rule.Data.EndIP})");
}
// Delete firewall rule
var ruleToDelete = await firewallCollection.GetAsync("allow-internal-network");
await ruleToDelete.Value.DeleteAsync(WaitUntil.Completed);
```
### 8. Configure Patch Schedule (Premium SKU)
```csharp
// Patch schedules require Premium SKU
var scheduleData = new RedisPatchScheduleData(
new[]
{
new RedisPatchScheduleSetting(RedisDayOfWeek.Saturday, 2) // 2 AM Saturday
{
MaintenanceWindow = TimeSpan.FromHours(5)
},
new RedisPatchScheduleSetting(RedisDayOfWeek.Sunday, 2) // 2 AM Sunday
{
MaintenanceWindow = TimeSpan.FromHours(5)
}
});
var scheduleCollection = cache.Value.GetRedisPatchSchedules();
await scheduleCollection.CreateOrUpdateAsync(
WaitUntil.Completed,
RedisPatchScheduleDefaultName.Default,
scheduleData);
```
### 9. Import/Export Data (Premium SKU)
```csharp
// Import data from blob storage
var importContent = new ImportRdbContent(
files: new[] { "https://mystorageaccount.blob.core.windows.net/container/dump.rdb" },
format: "RDB");
await cache.Value.ImportDataAsync(WaitUntil.Completed, importContent);
// Export data to blob storage
var exportContent = new ExportRdbContent(
prefix: "backup",
container: "https://mystorageaccount.blob.core.windows.net/container?sastoken",
format: "RDB");
await cache.Value.ExportDataAsync(WaitUntil.Completed, exportContent);
```
### 10. Force Reboot
```csharp
var rebootContent = new RedisRebootContent
{
RebootType = RedisRebootType.AllNodes,
ShardId = 0 // For clustered caches
};
await cache.Value.ForceRebootAsync(rebootContent);
```
## SKU Reference
| SKU | Family | Capacity | Features |
|-----|--------|----------|----------|
| Basic | C | 0-6 | Single node, no SLA, dev/test only |
| Standard | C | 0-6 | Two nodes (primary/replica), SLA |
| Premium | P | 1-5 | Clustering, geo-replication, VNet, persistence |
**Capacity Sizes (Family C - Basic/Standard)**:
- C0: 250 MB
- C1: 1 GB
- C2: 2.5 GB
- C3: 6 GB
- C4: 13 GB
- C5: 26 GB
- C6: 53 GB
**Capacity Sizes (Family P - Premium)**:
- P1: 6 GB per shard
- P2: 13 GB per shard
- P3: 26 GB per shard
- P4: 53 GB per shard
- P5: 120 GB per shard
## Key Types Reference
| Type | Purpose |
|------|---------|
| `ArmClient` | Entry point for all ARM operations |
| `RedisResource` | Represents a Redis cache instance |
| `RedisCollection` | Collection for cache CRUD operations |
| `RedisFirewallRuleResource` | Firewall rule for IP filtering |
| `RedisPatchScheduleResource` | Maintenance window configuration |
| `RedisLinkedServerWithPropertyResource` | Geo-replication linked server |
| `RedisPrivateEndpointConnectionResource` | Private endpoint connection |
| `RedisCacheAccessPolicyResource` | RBAC access policy |
| `RedisCreateOrUpdateContent` | Cache creation payload |
| `RedisPatch` | Cache update payload |
| `RedisSku` | SKU configuration (name, family, capacity) |
| `RedisAccessKeys` | Primary and secondary access keys |
| `RedisRegenerateKeyContent` | Key regeneration request |
## Best Practices
1. **Use `WaitUntil.Completed`** for operations that must finish before proceeding
2. **Use `WaitUntil.Started`** when you want to poll manually or run operations in parallel
3. **Always use `DefaultAzureCredential`** — never hardcode keys
4. **Handle `RequestFailedException`** for ARM API errors
5. **Use `CreateOrUpdateAsync`** for idempotent operations
6. **Navigate hierarchy** via `Get*` methods (e.g., `cache.GetRedisFirewallRules()`)
7. **Use Premium SKU** for production workloads requiring geo-replication, clustering, or persistence
8. **Enable TLS 1.2 minimum** — set `MinimumTlsVersion = RedisTlsVersion.Tls1_2`
9. **Disable non-SSL port** — set `EnableNonSslPort = false` for security
10. **Rotate keys regularly** — use `RegenerateKeyAsync` and update connection strings
## Error Handling
```csharp
using Azure;
try
{
var operation = await cacheCollection.CreateOrUpdateAsync(
WaitUntil.Completed, cacheName, cacheData);
}
catch (RequestFailedException ex) when (ex.Status == 409)
{
Console.WriteLine("Cache already exists");
}
catch (RequestFailedException ex) when (ex.Status == 400)
{
Console.WriteLine($"Invalid configuration: {ex.Message}");
}
catch (RequestFailedException ex)
{
Console.WriteLine($"ARM Error: {ex.Status} - {ex.ErrorCode}: {ex.Message}");
}
```
## Common Pitfalls
1. **SKU downgrades not allowed** — You cannot downgrade from Premium to Standard/Basic
2. **Clustering requires Premium** — Shard configuration only available on Premium SKU
3. **Geo-replication requires Premium** — Linked servers only work with Premium caches
4. **VNet injection requires Premium** — Virtual network support is Premium-only
5. **Patch schedules require Premium** — Maintenance windows only configurable on Premium
6. **Cache name globally unique** — Redis cache names must be unique across all Azure subscriptions
7. **Long provisioning times** — Cache creation can take 15-20 minutes; use `WaitUntil.Started` for async patterns
## Connecting with StackExchange.Redis (Data Plane)
After creating the cache with this management SDK, use StackExchange.Redis for data operations:
```csharp
using StackExchange.Redis;
// Get connection info from management SDK
var cache = await resourceGroup.Value.GetRedisAsync("my-redis-cache");
var keys = await cache.Value.GetKeysAsync();
// Connect with StackExchange.Redis
var connectionString = $"{cache.Value.Data.HostName}:{cache.Value.Data.SslPort},password={keys.Value.PrimaryKey},ssl=True,abortConnect=False";
var connection = ConnectionMultiplexer.Connect(connectionString);
var db = connection.GetDatabase();
// Data operations
await db.StringSetAsync("key", "value");
var value = await db.StringGetAsync("key");
```
## Related SDKs
| SDK | Purpose | Install |
|-----|---------|---------|
| `StackExchange.Redis` | Data plane (get/set, pub/sub, streams) | `dotnet add package StackExchange.Redis` |
| `Azure.ResourceManager.Redis` | Management plane (this SDK) | `dotnet add package Azure.ResourceManager.Redis` |
| `Microsoft.Azure.StackExchangeRedis` | Azure-specific Redis extensions | `dotnet add package Microsoft.Azure.StackExchangeRedis` |
Todos los archivos
0 archivosInstalar azure-resource-manager-redis-dotnet
Descarga y descomprime los archivos de habilidades en tu directorio .claude/skills/.
Descargar ZIPClona el repositorio y copia los archivos de la habilidad a tu proyecto.
git clone https://github.com/microsoft/skills/tree/main/.github/plugins/azure-sdk-dotnet/skills/azure-resource-manager-redis-dotnet # Copy SKILL.md to your .claude/skills/ directory
Copiar





Hogar
