opción
HogarHogar Skill DevOps y CI/CD azure-resource-manager-redis-dotnet

azure-resource-manager-redis-dotnet

microsoft/skills 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 todo
2
Tiempo actualizado 18 de septiembre de 2026

Azure.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

  1. Utiliza WaitUntil.Completed para las operaciones que deben finalizar antes de continuar
  2. Utiliza WaitUntil.Started cuando quieras realizar un sondeo manualmente o ejecutar operaciones en paralelo
  3. Utilice siempre DefaultAzureCredential; nunca codifique claves de forma estática
  4. Gestiona la excepción RequestFailedException en caso de errores de la API de ARM
  5. Utiliza CreateOrUpdateAsync para operaciones idempotentes
  6. Navega por la jerarquía mediante los métodos Get* (por ejemplo, cache.GetRedisFirewallRules())
  7. Utiliza la SKU Premium para cargas de trabajo de producción que requieran replicación geográfica, clústeres o persistencia
  8. Habilita como mínimo TLS 1.2: establece MinimumTlsVersion = RedisTlsVersion.Tls1_2
  9. Desactivar el puerto no SSL: establecer EnableNonSslPort = false por motivos de seguridad
  10. Rota las claves periódicamente: utiliza RegenerateKeyAsync y 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

  1. No se permiten cambios a un nivel inferior de SKU: no se puede pasar de Premium a Standard/Basic
  2. La agrupación en clústeres requiere laSKU Premium: la configuración de fragmentos solo está disponible en la SKU Premium
  3. La replicación geográfica requiere la versión Premium: los servidores vinculados solo funcionan con cachés Premium
  4. La inyección de VNet requiere el plan Premium: la compatibilidad con redes virtuales solo está disponible en el plan Premium
  5. Las programaciones de parches requieren el plan Premium: las ventanas de mantenimiento solo se pueden configurar en el plan Premium
  6. 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
  7. Tiempos de aprovisionamiento prolongados: la creación de la caché puede tardar entre 15 y 20 minutos; utiliza WaitUntil.Started para 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
Ver en GitHub
---
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 archivos

Instalar azure-resource-manager-redis-dotnet

Descarga y descomprime los archivos de habilidades en tu directorio .claude/skills/.

Descargar ZIP

Clona 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 Copiar
Configuración rápida: Copia la carpeta de la habilidad en .claude/skills/ Claude detectará y utilizará automáticamente la habilidad
Repositorio microsoft/skills

Habilidades relacionadas

Verification &amp; Quality Assurance
Tiempo actualizado 29 de junio de 2026
base44-cli
Tiempo actualizado 29 de junio de 2026
klingai-upgrade-migration
Tiempo actualizado 3 de julio de 2026
Railway CLI Management
Tiempo actualizado 2 de julio de 2026
OR