Option
HeimHeim Skill DevOps und CI/CD azure-resource-manager-redis-dotnet

azure-resource-manager-redis-dotnet

microsoft/skills microsoft/skills

Verwalten Sie Azure Cache for Redis-Instanzen über das Azure Resource Manager .NET SDK, einschließlich Erstellung, Firewall-Regeln, Zugriffsschlüssel, Patch-Zeitpläne, Georeplikation und private Endpunkte.

...Alle erweitern
0
Zeit aktualisiert 18. September 2026

Azure.ResourceManager.Redis (.NET)

SDK für die Verwaltungsebene zur Bereitstellung und Verwaltung von Azure Cache for Redis-Ressourcen über Azure Resource Manager.

⚠️ Management-Ebene vs. Datenebene

  • Dieses SDK (Azure.ResourceManager.Redis): Caches erstellen, Firewall-Regeln konfigurieren, Zugriffsschlüssel verwalten, Georeplikation einrichten
  • Data-Plane-SDK (StackExchange.Redis): Schlüssel abrufen/festlegen, Pub/Sub, Streams, Lua-Skripte

Installation

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

Aktuelle Version: 1.5.1 (Stable)
API-Version: 01.11.2024
Ziel-Frameworks: .NET 8.0, .NET Standard 2.0

Umgebungsvariablen

AZURE_SUBSCRIPTION_ID= # Erforderlich: Azure-Abonnement-ID
AZURE_TOKEN_CREDENTIALS=prod  # Nur erforderlich, wenn „DefaultAzureCredential“ in der Produktion verwendet wird
AZURE_TENANT_ID= # Für die Authentifizierung über eine Dienstidentität (optional)
AZURE_CLIENT_ID= # Für die Authentifizierung über eine Dienstinstanz (optional)
AZURE_CLIENT_SECRET= # Für die Authentifizierung über eine Dienstinstanz (optional)

Authentifizierung

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

// Lokale Entwicklung: DefaultAzureCredential. Produktion: Setze AZURE_TOKEN_CREDENTIALS=prod oder AZURE_TOKEN_CREDENTIALS=
var credential = new DefaultAzureCredential(
    DefaultAzureCredential.DefaultEnvironmentVariableName
);
// Oder verwenden Sie in der Produktion direkt eine bestimmte Anmeldeinformation:
// Siehe https://learn.microsoft.com/dotnet/api/overview/azure/identity-readme?view=azure-dotnet#credential-classes
// var credential = new ManagedIdentityCredential();
var armClient = new ArmClient(credential);

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

Ressourcenhierarchie

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

Kern-Workflows

1. Redis-Cache erstellen

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

// Ressourcengruppe abrufen
var resourceGroup = await subscription
    .GetResourceGroupAsync("my-resource-group");

// Cache-Konfiguration definieren
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"
    }
};

// Cache erstellen (lang andauernder Vorgang)
var cacheCollection = resourceGroup.Value.GetAllRedis();
var operation = await cacheCollection.CreateOrUpdateAsync(
    WaitUntil.Completed,
    "my-redis-cache",
    cacheData);

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

2. Redis-Cache abrufen

// Vorhandenen Cache abrufen
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($"Bereitstellungsstatus: {cache.Value.Data.ProvisioningState}");

3. Redis-Cache aktualisieren

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. Redis-Cache löschen

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

5. Zugriffsschlüssel abrufen

var keys = await cache.Value.GetKeysAsync();
Console.WriteLine($"Primärschlüssel: {keys.Value.PrimaryKey}");
Console.WriteLine($"Sekundärschlüssel: {keys.Value.SecondaryKey}");

6. Zugriffsschlüssel neu generieren

var regenerateContent = new RedisRegenerateKeyContent(RedisRegenerateKeyType.Primary);
var newKeys = await cache.Value.RegenerateKeyAsync(regenerateContent);
Console.WriteLine($"Neuer Primärschlüssel: {newKeys.Value.PrimaryKey}");

7. Firewall-Regeln verwalten

// Firewall-Regel erstellen
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);

// Alle Firewall-Regeln auflisten
await foreach (var rule in firewallCollection.GetAllAsync())
{
    Console.WriteLine($"Regel: {rule.Data.Name} ({rule.Data.StartIP} - {rule.Data.EndIP})");
}

// Firewall-Regel löschen
var ruleToDelete = await firewallCollection.GetAsync("allow-internal-network");
await ruleToDelete.Value.DeleteAsync(WaitUntil.Completed);

8. Patch-Zeitplan konfigurieren (Premium-SKU)

// Patch-Zeitpläne erfordern die Premium-SKU
var scheduleData = new RedisPatchScheduleData(
    new[]
    {
        new RedisPatchScheduleSetting(RedisDayOfWeek.Saturday, 2) // Samstag, 2 Uhr morgens
        {
            MaintenanceWindow = TimeSpan.FromHours(5)
        },
        new RedisPatchScheduleSetting(RedisDayOfWeek.Sunday, 2) // Sonntag, 2 Uhr morgens
        {
            MaintenanceWindow = TimeSpan.FromHours(5)
        }
    });

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

9. Daten importieren/exportieren (Premium-SKU)

// Daten aus dem Blob-Speicher importieren
var importContent = new ImportRdbContent(
    files: new[] { "https://mystorageaccount.blob.core.windows.net/container/dump.rdb" },
    format: "RDB");

await cache.Value.ImportDataAsync(WaitUntil.Completed, importContent);

// Daten in den Blob-Speicher exportieren
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. Neustart erzwingen

var rebootContent = new RedisRebootContent
{
    RebootType = RedisRebootType.AllNodes,
    ShardId = 0 // Für Cluster-Caches
};

await cache.Value.ForceRebootAsync(rebootContent);

SKU-Referenz

SKU Familie Kapazität Funktionen
Basis C 0–6 Einzelknoten, kein SLA, nur für Entwicklung und Tests
Standard C 0–6 Zwei Knoten (Primär/Replik), SLA
Premium P 1–5 Clustering, Georeplikation, VNet, Persistenz

Kapazitätsgrößen (Familie 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

Speicherkapazitäten (Familie P – Premium):

  • P1: 6 GB pro Shard
  • P2: 13 GB pro Shard
  • P3: 26 GB pro Shard
  • P4: 53 GB pro Shard
  • P5: 120 GB pro Shard

Referenz zu Schlüsseltypen

Typ Zweck
ArmClient Einstiegspunkt für alle ARM-Operationen
RedisResource Stellt eine Redis-Cache-Instanz dar
RedisCollection Sammlung für CRUD-Operationen im Cache
RedisFirewallRuleResource Firewall-Regel für die IP-Filterung
RedisPatchScheduleResource Konfiguration des Wartungsfensters
RedisLinkedServerWithPropertyResource Georeplizierter verbundener Server
RedisPrivateEndpointConnectionResource Verbindung zum privaten Endpunkt
RedisCacheAccessPolicyResource RBAC-Zugriffsrichtlinie
RedisCreateOrUpdateContent Nutzdaten für die Cache-Erstellung
RedisPatch Nutzdaten für die Cache-Aktualisierung
RedisSku SKU-Konfiguration (Name, Familie, Kapazität)
RedisAccessKeys Primäre und sekundäre Zugriffsschlüssel
RedisRegenerateKeyContent Anfrage zur Schlüsselregenerierung

Bewährte Vorgehensweisen

  1. Verwenden Sie „WaitUntil.Completed“ für Operationen, die abgeschlossen sein müssen, bevor fortgefahren werden kann
  2. Verwenden Sie „WaitUntil.Started“, wenn Sie manuell abfragen oder Vorgänge parallel ausführen möchten
  3. Verwenden Sie immer „DefaultAzureCredential“ – geben Sie Schlüssel niemals fest ein
  4. Behandeln Sie „RequestFailedException“ bei Fehlern der ARM-API
  5. Verwenden Sie „CreateOrUpdateAsync“ für idempotente Vorgänge
  6. Navigieren Sie durch die Hierarchie mithilfe von „Get* “-Methoden (z. B. „cache.GetRedisFirewallRules()“)
  7. Verwenden Sie die Premium-SKU für Produktions-Workloads, die Georeplikation, Clustering oder Persistenz erfordern
  8. Aktivieren Sie mindestens TLS 1.2 – setzen Sie MinimumTlsVersion = RedisTlsVersion.Tls1_2
  9. Deaktivieren Sie den Nicht-SSL-Port – setzen Sie aus Sicherheitsgründen „EnableNonSslPort“ auf „false“
  10. Schlüssel regelmäßig rotieren„RegenerateKeyAsync“ verwenden und Verbindungszeichenfolgen aktualisieren

Fehlerbehandlung

using Azure;

try
{
    var operation = await cacheCollection.CreateOrUpdateAsync(
        WaitUntil.Completed, cacheName, cacheData);
}
catch (RequestFailedException ex) when (ex.Status == 409)
{
    Console.WriteLine("Cache existiert bereits");
}
catch (RequestFailedException ex) when (ex.Status == 400)
{
    Console.WriteLine($"Ungültige Konfiguration: {ex.Message}");
}
catch (RequestFailedException ex)
{
    Console.WriteLine($"ARM-Fehler: {ex.Status} - {ex.ErrorCode}: {ex.Message}");
}

Häufige Fallstricke

  1. SKU-Downgrades sind nicht zulässig – Ein Downgrade von „Premium“ auf „Standard“ oder „Basic“ ist nicht möglich
  2. Für Clustering ist „Premium“ erforderlich – Die Shard-Konfiguration ist nur bei der SKU „Premium“ verfügbar
  3. Georeplikation erfordert Premium – Verknüpfte Server funktionieren nur mit Premium-Caches
  4. VNet-Einbindung erfordert Premium – Unterstützung für virtuelle Netzwerke ist nur bei Premium verfügbar
  5. Patch-Zeitpläne erfordern Premium – Wartungsfenster sind nur bei Premium konfigurierbar
  6. Cache-Name muss global eindeutig sein – Redis-Cache-Namen müssen in allen Azure-Abonnements eindeutig sein
  7. Lange Bereitstellungszeiten – Die Erstellung eines Caches kann 15–20 Minuten dauern; verwenden Sie „WaitUntil.Started“ für asynchrone Muster

Verbindung mit StackExchange.Redis (Datenebene)

Nachdem Sie den Cache mit diesem Verwaltungs-SDK erstellt haben, verwenden Sie „StackExchange.Redis“ für Datenoperationen:

using StackExchange.Redis;

// Verbindungsinformationen vom Verwaltungs-SDK abrufen
var cache = await resourceGroup.Value.GetRedisAsync("my-redis-cache");
var keys = await cache.Value.GetKeysAsync();

// Verbindung mit StackExchange.Redis herstellen
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();

// Datenoperationen
await db.StringSetAsync("key", "value");
var value = await db.StringGetAsync("key");

Verwandte SDKs

SDK Zweck Installieren
StackExchange.Redis Datenebene (Get/Set, Pub/Sub, Streams) dotnet add package StackExchange.Redis
Azure.ResourceManager.Redis Managementebene (dieses SDK) dotnet add package Azure.ResourceManager.Redis
Microsoft.Azure.StackExchangeRedis Azure-spezifische Redis-Erweiterungen dotnet add package Microsoft.Azure.StackExchangeRedis
Auf GitHub ansehen
---
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` |

Alle Dateien

0 Dateien

azure-resource-manager-redis-dotnet installieren

Laden Sie die Skill-Dateien herunter und entpacken Sie sie in Ihr Verzeichnis „.claude/skills/“.

ZIP herunterladen

Klonen Sie das Repository und kopieren Sie die Skill-Dateien in Ihr Projekt.

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

Kopieren Kopieren
Schnelle Einrichtung: Kopiere den Skill-Ordner nach .claude/skills/ Claude erkennt den Skill automatisch und nutzt ihn.
Repository microsoft/skills

Ähnliche Skills

Verification &amp; Quality Assurance
Zeit aktualisiert 29. Juni 2026
klingai-upgrade-migration
Zeit aktualisiert 3. Juli 2026
base44-cli
Zeit aktualisiert 29. Juni 2026
Railway CLI Management
Zeit aktualisiert 2. Juli 2026
OR