opção
LarLar Skill DevOps e CI/CD azure-resource-manager-redis-dotnet

azure-resource-manager-redis-dotnet

microsoft/skills microsoft/skills

Gerencie instâncias do Azure Cache for Redis por meio do SDK .NET do Azure Resource Manager, incluindo criação, regras de firewall, chaves de acesso, programações de atualizações, replicação geográfica e pontos de extremidade privados.

...Expandir tudo
2
Tempo atualizado 18 de Setembro de 2026

Azure.ResourceManager.Redis (.NET)

SDK do plano de gerenciamento para provisionamento e gerenciamento de recursos do Azure Cache for Redis por meio do Azure Resource Manager.

⚠️ Plano de gerenciamento x plano de dados

  • Este SDK (Azure.ResourceManager.Redis): cria caches, configura regras de firewall, gerencia chaves de acesso e configura replicação geográfica
  • SDK do plano de dados (StackExchange.Redis): Obter/definir chaves, pub/sub, fluxos, scripts Lua

Instalação

dotnet add package Azure.ResourceManager.Redis
dotnet add package Azure.Identity

Versão atual: 1.5.1 (Estável)
Versão da API: 2024-11-01
Frameworks de destino: .NET 8.0, .NET Standard 2.0

Variáveis de ambiente

AZURE_SUBSCRIPTION_ID= # Obrigatório: ID da assinatura do Azure
AZURE_TOKEN_CREDENTIALS=prod  # Obrigatório apenas se DefaultAzureCredential for usado em produção
AZURE_TENANT_ID= # Para autenticação por entidade de serviço (opcional)
AZURE_CLIENT_ID= # Para autenticação por entidade de serviço (opcional)
AZURE_CLIENT_SECRET= # Para autenticação por entidade de serviço (opcional)

Autenticação

using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Redis;

// Desenvolvimento local: DefaultAzureCredential. Produção: defina AZURE_TOKEN_CREDENTIALS=prod ou AZURE_TOKEN_CREDENTIALS=
var credential = new DefaultAzureCredential(
    DefaultAzureCredential.DefaultEnvironmentVariableName
);
// Ou use uma credencial específica diretamente em produção:
// Consulte https://learn.microsoft.com/dotnet/api/overview/azure/identity-readme?view=azure-dotnet#credential-classes
// var credential = new ManagedIdentityCredential();
var armClient = new ArmClient(credential);

// Obter a assinatura
var subscriptionId = Environment.GetEnvironmentVariable("AZURE_SUBSCRIPTION_ID");
var subscription = armClient.GetSubscriptionResource(
    new ResourceIdentifier($"/subscriptions/{subscriptionId}"));

Hierarquia de recursos

ArmClient
└── SubscriptionResource
    └── ResourceGroupResource
        └── RedisResource
            ├── RedisFirewallRuleResource
            ├── RedisPatchScheduleResource
            ├── RedisLinkedServerWithPropertyResource
            ├── RedisPrivateEndpointConnectionResource
            └── RedisCacheAccessPolicyResource

Fluxos de trabalho principais

1. Criar cache do Redis

using Azure.ResourceManager.Redis;
using Azure.ResourceManager.Redis.Models;

// Obter grupo de recursos
var resourceGroup = await subscription
    .GetResourceGroupAsync("my-resource-group");

// Definir a configuração do cache
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"
    }
};

// Criar cache (operação de longa duração)
var cacheCollection = resourceGroup.Value.GetAllRedis();
var operation = await cacheCollection.CreateOrUpdateAsync(
    WaitUntil.Completed,
    "my-redis-cache",
    cacheData);

RedisResource cache = operation.Value;
Console.WriteLine($"Cache criado: {cache.Data.HostName}");

2. Obter o cache Redis

// Obter o cache existente
var cache = await resourceGroup.Value
    .GetRedisAsync("my-redis-cache");

Console.WriteLine($"Host: {cache.Value.Data.HostName}");
Console.WriteLine($"Porta: {cache.Value.Data.Port}");
Console.WriteLine($"Porta SSL: {cache.Value.Data.SslPort}");
Console.WriteLine($"Estado de provisionamento: {cache.Value.Data.ProvisioningState}");

3. Atualizar o cache 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. Excluir o cache do Redis

await cache.Value.DeleteAsync(WaitUntil.Completed);

5. Obter chaves de acesso

var keys = await cache.Value.GetKeysAsync();
Console.WriteLine($"Chave primária: {keys.Value.PrimaryKey}");
Console.WriteLine($"Chave secundária: {keys.Value.SecondaryKey}");

6. Regenerar chaves de acesso

var regenerateContent = new RedisRegenerateKeyContent(RedisRegenerateKeyType.Primary);
var newKeys = await cache.Value.RegenerateKeyAsync(regenerateContent);
Console.WriteLine($"Nova chave primária: {newKeys.Value.PrimaryKey}");

7. Gerenciar regras de firewall

// Criar regra de firewall
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);

// Listar todas as regras de firewall
await foreach (var rule in firewallCollection.GetAllAsync())
{
    Console.WriteLine($"Regra: {rule.Data.Name} ({rule.Data.StartIP} - {rule.Data.EndIP})");
}

// Excluir regra de firewall
var ruleToDelete = await firewallCollection.GetAsync("allow-internal-network");
await ruleToDelete.Value.DeleteAsync(WaitUntil.Completed);

8. Configurar a programação de patches (SKU Premium)

// As programações de patch exigem o SKU Premium
var scheduleData = new RedisPatchScheduleData(
    new[]
    {
        new RedisPatchScheduleSetting(RedisDayOfWeek.Saturday, 2) // 2h da manhã de sábado
        {
            MaintenanceWindow = TimeSpan.FromHours(5)
        },
        new RedisPatchScheduleSetting(RedisDayOfWeek.Sunday, 2) // 2h da manhã de domingo
        {
            MaintenanceWindow = TimeSpan.FromHours(5)
        }
    });

var scheduleCollection = cache.Value.GetRedisPatchSchedules();
await scheduleCollection.CreateOrUpdateAsync(
    WaitUntil.Completed,
    RedisPatchScheduleDefaultName.Default,
    scheduleData);

9. Importação/exportação de dados (SKU Premium)

// Importar dados do armazenamento 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 dados para o armazenamento 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. Reinicialização forçada

var rebootContent = new RedisRebootContent
{
    RebootType = RedisRebootType.AllNodes,
    ShardId = 0 // Para caches em cluster
};

await cache.Value.ForceRebootAsync(rebootContent);

Referência de SKU

SKU Família Capacidade Recursos
Básico C 0-6 Nó único, sem SLA, apenas para desenvolvimento/teste
Padrão C 0-6 Dois nós (primário/réplica), SLA
Premium P 1-5 Clustering, replicação geográfica, VNet, persistência

Tamanhos de capacidade (Família C – Básico/Padrão):

  • C0: 250 MB
  • C1: 1 GB
  • C2: 2,5 GB
  • C3: 6 GB
  • C4: 13 GB
  • C5: 26 GB
  • C6: 53 GB

Tamanhos de capacidade (Família 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

Referência de tipos de chave

Tipo Finalidade
ArmClient Ponto de entrada para todas as operações ARM
RedisResource Representa uma instância do cache Redis
RedisCollection Coleção para operações CRUD de cache
RedisFirewallRuleResource Regra de firewall para filtragem de IP
RedisPatchScheduleResource Configuração da janela de manutenção
RedisLinkedServerWithPropertyResource Servidor vinculado com replicação geográfica
RedisPrivateEndpointConnectionResource Conexão de endpoint privado
RedisCacheAccessPolicyResource Política de acesso RBAC
RedisCreateOrUpdateContent Carga útil de criação de cache
RedisPatch Carga útil de atualização do cache
RedisSku Configuração do SKU (nome, família, capacidade)
RedisAccessKeys Chaves de acesso primária e secundária
RedisRegenerateKeyContent Solicitação de regeneração de chave

Práticas recomendadas

  1. Use WaitUntil.Completed para operações que devem ser concluídas antes de prosseguir
  2. Use WaitUntil.Started quando quiser fazer a verificação manualmente ou executar operações em paralelo
  3. Sempre use DefaultAzureCredential — nunca codifique chaves diretamente
  4. Trate a exceção RequestFailedException para erros da API ARM
  5. Use CreateOrUpdateAsync para operações idempotentes
  6. Navegue pela hierarquia por meio dos métodos Get* (por exemplo, cache.GetRedisFirewallRules())
  7. Use o SKU Premium para cargas de trabalho de produção que exijam replicação geográfica, clustering ou persistência
  8. Habilite no mínimo o TLS 1.2 — defina MinimumTlsVersion = RedisTlsVersion.Tls1_2
  9. Desative a porta não SSL — defina EnableNonSslPort = false por motivos de segurança
  10. Faça a rotação das chaves regularmente — use RegenerateKeyAsync e atualize as cadeias de conexão

Tratamento de erros

using Azure;

try
{
    var operation = await cacheCollection.CreateOrUpdateAsync(
        WaitUntil.Completed, cacheName, cacheData);
}
catch (RequestFailedException ex) when (ex.Status == 409)
{
    Console.WriteLine("O cache já existe");
}
catch (RequestFailedException ex) when (ex.Status == 400)
{
    Console.WriteLine($"Configuração inválida: {ex.Message}");
}
catch (RequestFailedException ex)
{
    Console.WriteLine($"Erro do ARM: {ex.Status} - {ex.ErrorCode}: {ex.Message}");
}

Armadilhas comuns

  1. Não é permitido fazer downgrade de SKUs — Não é possível fazer downgrade do plano Premium para o Standard/Basic
  2. O clustering requer o plano Premium — a configuração de fragmentação está disponível apenas no plano Premium
  3. A replicação geográfica requer o plano Premium — Servidores vinculados só funcionam com caches do plano Premium
  4. A injeção de VNet requer o plano Premium — O suporte a redes virtuais é exclusivo do plano Premium
  5. Agendamentos de patches exigem o plano Premium — Janelas de manutenção só podem ser configuradas no plano Premium
  6. Nome do cache globalmente exclusivo — Os nomes dos caches do Redis devem ser exclusivos em todas as assinaturas do Azure
  7. Tempos de provisionamento longos — A criação do cache pode levar de 15 a 20 minutos; use WaitUntil.Started para padrões assíncronos

Conectando-se ao StackExchange.Redis (plano de dados)

Após criar o cache com este SDK de gerenciamento, use o StackExchange.Redis para operações de dados:

using StackExchange.Redis;

// Obter informações de conexão do SDK de gerenciamento
var cache = await resourceGroup.Value.GetRedisAsync("my-redis-cache");
var keys = await cache.Value.GetKeysAsync();

// Conecte-se ao StackExchange.Redis
var connectionString = $"{cache.Value.Data.HostName}:{cache.Value.Data.SslPort},password={keys.Value.PrimaryKey},ssl=True,abortConnect=False";
var conexão = ConnectionMultiplexer.Connect(stringConexão);
var bancoDeDados = conexão.GetDatabase();

// Operações com dados
await bancoDeDados.StringSetAsync("chave", "valor");
var valor = await bancoDeDados.StringGetAsync("chave");

SDKs relacionados

SDK Finalidade Instalar
StackExchange.Redis Plano de dados (get/set, pub/sub, fluxos) dotnet add package StackExchange.Redis
Azure.ResourceManager.Redis Plano de gerenciamento (este SDK) dotnet add package Azure.ResourceManager.Redis
Microsoft.Azure.StackExchangeRedis Extensões do Redis específicas do Azure dotnet add package Microsoft.Azure.StackExchangeRedis
Ver no 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 os arquivos

0 arquivos

Instalar azure-resource-manager-redis-dotnet

Baixe e extraia os arquivos das habilidades para o diretório .claude/skills/.

Baixar ZIP

Clone o repositório e copie os arquivos da habilidade para o seu projeto.

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
Configuração rápida: Copie a pasta da habilidade para .claude/skills/ O Claude detectará e utilizará automaticamente a habilidade
Repositório microsoft/skills

Habilidades relacionadas

Verification &amp; Quality Assurance
Tempo atualizado 29 de Junho de 2026
base44-cli
Tempo atualizado 29 de Junho de 2026
klingai-upgrade-migration
Tempo atualizado 3 de Julho de 2026
Railway CLI Management
Tempo atualizado 2 de Julho de 2026
OR