azure-resource-manager-redis-dotnet
microsoft/skills
Gérez les instances d'Azure Cache for Redis à l'aide du SDK .NET d'Azure Resource Manager, notamment la création, les règles de pare-feu, les clés d'accès, les calendriers de mise à jour, la réplication géographique et les points de terminaison privés.
...Développer toutAzure.ResourceManager.Redis (.NET)
SDK du plan de gestion permettant de provisionner et de gérer les ressources Azure Cache for Redis via Azure Resource Manager.
⚠️ Plan de gestion vs plan de données
- Ce SDK (Azure.ResourceManager.Redis) permet de créer des caches, de configurer des règles de pare-feu, de gérer les clés d’accès et de mettre en place la réplication géographique
- SDK du plan de données (StackExchange.Redis): récupération/définition de clés, pub/sub, flux, scripts Lua
Installation
dotnet add package Azure.ResourceManager.Redis
dotnet add package Azure.Identity
Version actuelle: 1.5.1 (stable)
Version de l'API: 01/11/2024
Frameworks cibles: .NET 8.0, .NET Standard 2.0
Variables d'environnement
AZURE_SUBSCRIPTION_ID= # Obligatoire : ID d'abonnement Azure
AZURE_TOKEN_CREDENTIALS=prod # Obligatoire uniquement si DefaultAzureCredential est utilisé en production
AZURE_TENANT_ID= # Pour l'authentification par entité de service (facultatif)
AZURE_CLIENT_ID= # Pour l'authentification par entité de service (facultatif)
AZURE_CLIENT_SECRET= # Pour l'authentification par entité de service (facultatif)
Authentification
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Redis;
// Développement local : DefaultAzureCredential. Production : définissez AZURE_TOKEN_CREDENTIALS=prod ou AZURE_TOKEN_CREDENTIALS=
var credential = new DefaultAzureCredential(
DefaultAzureCredential.DefaultEnvironmentVariableName
);
// Ou utiliser directement des informations d'identification spécifiques en production :
// Voir https://learn.microsoft.com/dotnet/api/overview/azure/identity-readme?view=azure-dotnet#credential-classes
// var credential = new ManagedIdentityCredential();
var armClient = new ArmClient(credential);
// Récupérer l'abonnement
var subscriptionId = Environment.GetEnvironmentVariable("AZURE_SUBSCRIPTION_ID");
var subscription = armClient.GetSubscriptionResource(
new ResourceIdentifier($"/subscriptions/{subscriptionId}"));
Hiérarchie des ressources
ArmClient
└── SubscriptionResource
└── ResourceGroupResource
└── RedisResource
├── RedisFirewallRuleResource
├── RedisPatchScheduleResource
├── RedisLinkedServerWithPropertyResource
├── RedisPrivateEndpointConnectionResource
└── RedisCacheAccessPolicyResource
Workflows principaux
1. Créer un cache Redis
using Azure.ResourceManager.Redis;
using Azure.ResourceManager.Redis.Models;
// Récupérer le groupe de ressources
var resourceGroup = await subscription
.GetResourceGroupAsync("my-resource-group");
// Définir la configuration du 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"
}
};
// Création du cache (opération de longue durée)
var cacheCollection = resourceGroup.Value.GetAllRedis();
var operation = await cacheCollection.CreateOrUpdateAsync(
WaitUntil.Completed,
"my-redis-cache",
cacheData);
RedisResource cache = operation.Value;
Console.WriteLine($"Cache créé : {cache.Data.HostName}");
2. Récupérer le cache Redis
// Récupérer le cache existant
var cache = await resourceGroup.Value
.GetRedisAsync("my-redis-cache");
Console.WriteLine($"Hôte : {cache.Value.Data.HostName}");
Console.WriteLine($"Port : {cache.Value.Data.Port}");
Console.WriteLine($"Port SSL : {cache.Value.Data.SslPort}");
Console.WriteLine($"État de provisionnement : {cache.Value.Data.ProvisioningState}");
3. Mise à jour du 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. Supprimer le cache Redis
await cache.Value.DeleteAsync(WaitUntil.Completed);
5. Récupérer les clés d'accès
var keys = await cache.Value.GetKeysAsync();
Console.WriteLine($"Clé principale : {keys.Value.PrimaryKey}");
Console.WriteLine($"Clé secondaire : {keys.Value.SecondaryKey}");
6. Régénérer les clés d’accès
var regenerateContent = new RedisRegenerateKeyContent(RedisRegenerateKeyType.Primary);
var newKeys = await cache.Value.RegenerateKeyAsync(regenerateContent);
Console.WriteLine($"Nouvelle clé primaire : {newKeys.Value.PrimaryKey}");
7. Gérer les règles de pare-feu
// Créer une règle de pare-feu
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);
// Liste de toutes les règles de pare-feu
await foreach (var rule in firewallCollection.GetAllAsync())
{
Console.WriteLine($"Règle : {rule.Data.Name} ({rule.Data.StartIP} - {rule.Data.EndIP})");
}
// Supprimer une règle de pare-feu
var ruleToDelete = await firewallCollection.GetAsync("allow-internal-network");
await ruleToDelete.Value.DeleteAsync(WaitUntil.Completed);
8. Configurer le calendrier de mise à jour (SKU Premium)
// Les plannings de mise à jour nécessitent une version Premium
var scheduleData = new RedisPatchScheduleData(
new[]
{
new RedisPatchScheduleSetting(RedisDayOfWeek.Saturday, 2) // 2 h du matin le samedi
{
MaintenanceWindow = TimeSpan.FromHours(5)
},
new RedisPatchScheduleSetting(RedisDayOfWeek.Sunday, 2) // 2 h du matin le dimanche
{
MaintenanceWindow = TimeSpan.FromHours(5)
}
});
var scheduleCollection = cache.Value.GetRedisPatchSchedules();
await scheduleCollection.CreateOrUpdateAsync(
WaitUntil.Completed,
RedisPatchScheduleDefaultName.Default,
scheduleData);
9. Importation/exportation de données (SKU Premium)
// Importer des données depuis le stockage 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);
// Exportation de données vers le stockage 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. Redémarrage forcé
var rebootContent = new RedisRebootContent
{
RebootType = RedisRebootType.AllNodes,
ShardId = 0 // Pour les caches en cluster
};
await cache.Value.ForceRebootAsync(rebootContent);
Référence SKU
| SKU | Famille | Capacité | Fonctionnalités |
|---|---|---|---|
| De base | C | 0-6 | Un seul nœud, pas de SLA, développement/test uniquement |
| Standard | C | 0-6 | Deux nœuds (principal/réplique), SLA |
| Premium | P | 1 à 5 | Mise en cluster, réplication géographique, réseau virtuel, persistance |
Tailles de capacité (famille C - Basique/Standard):
- C0 : 250 Mo
- C1 : 1 Go
- C2 : 2,5 Go
- C3 : 6 Go
- C4 : 13 Go
- C5 : 26 Go
- C6 : 53 Go
Tailles de capacité (Famille P - Premium):
- P1 : 6 Go par fragment
- P2 : 13 Go par shard
- P3 : 26 Go par shard
- P4 : 53 Go par shard
- P5 : 120 Go par shard
Référence des types de clés
| Type | Objectif |
|---|---|
ArmClient |
Point d'entrée pour toutes les opérations ARM |
RedisResource |
Représente une instance de cache Redis |
RedisCollection |
Collection pour les opérations CRUD sur le cache |
RedisFirewallRuleResource |
Règle de pare-feu pour le filtrage d'adresses IP |
RedisPatchScheduleResource |
Configuration de la fenêtre de maintenance |
RedisLinkedServerWithPropertyResource |
Serveur lié avec réplication géographique |
RedisPrivateEndpointConnectionResource |
Connexion au point de terminaison privé |
RedisCacheAccessPolicyResource |
Politique d'accès RBAC |
RedisCreateOrUpdateContent |
Données utiles de création du cache |
RedisPatch |
Données utiles de mise à jour du cache |
RedisSku |
Configuration du SKU (nom, famille, capacité) |
RedisAccessKeys |
Clés d'accès principale et secondaire |
RedisRegenerateKeyContent |
Demande de régénération de clé |
Meilleures pratiques
- Utilisez
WaitUntil.Completedpour les opérations qui doivent être terminées avant de poursuivre - Utilisez
WaitUntil.Startedlorsque vous souhaitez effectuer une interrogation manuelle ou exécuter des opérations en parallèle - Utilisez toujours
DefaultAzureCredential— ne codez jamais les clés en dur - Gérez les exceptions
RequestFailedExceptionen cas d’erreurs de l’API ARM - Utilisez
CreateOrUpdateAsyncpour les opérations idempotentes - Parcourez la hiérarchie via les méthodes
Get*(par exemple,cache.GetRedisFirewallRules()) - Utilisez la SKU Premium pour les charges de travail en production nécessitant une réplication géographique, une mise en cluster ou la persistance
- Activer au minimum TLS 1.2 — définir
MinimumTlsVersion = RedisTlsVersion.Tls1_2 - Désactivez le port non SSL — définissez
EnableNonSslPort = falsepour des raisons de sécurité - Effectuez une rotation régulière des clés: utilisez
RegenerateKeyAsyncet mettez à jour les chaînes de connexion
Gestion des erreurs
using Azure;
try
{
var operation = await cacheCollection.CreateOrUpdateAsync(
WaitUntil.Completed, cacheName, cacheData);
}
catch (RequestFailedException ex) when (ex.Status == 409)
{
Console.WriteLine("Le cache existe déjà");
}
catch (RequestFailedException ex) when (ex.Status == 400)
{
Console.WriteLine($"Configuration non valide : {ex.Message}");
}
catch (RequestFailedException ex)
{
Console.WriteLine($"Erreur ARM : {ex.Status} - {ex.ErrorCode} : {ex.Message}");
}
Pièges courants
- Les rétrogradations de SKU ne sont pas autorisées — Vous ne pouvez pas passer d’une offre Premium à une offre Standard ou Basic
- La mise en cluster nécessite la SKU Premium — La configuration en shards n’est disponible que sur la SKU Premium
- La réplication géographique nécessite la version Premium — Les serveurs liés ne fonctionnent qu’avec les caches Premium
- L’injection dans un réseau virtuel nécessite le SKU Premium — La prise en charge des réseaux virtuels est réservée au SKU Premium
- Les calendriers de correctifs nécessitent la version Premium — Les fenêtres de maintenance ne sont configurables que sur la version Premium
- Nom de cache unique au niveau mondial — Les noms de cache Redis doivent être uniques dans tous les abonnements Azure
- Temps de provisionnement longs — La création d’un cache peut prendre entre 15 et 20 minutes ; utilisez
WaitUntil.Startedpour les modèles asynchrones
Connexion avec StackExchange.Redis (plan de données)
Après avoir créé le cache à l’aide de ce SDK de gestion, utilisez StackExchange.Redis pour les opérations sur les données :
using StackExchange.Redis;
// Récupérer les informations de connexion à partir du SDK de gestion
var cache = await resourceGroup.Value.GetRedisAsync("my-redis-cache");
var keys = await cache.Value.GetKeysAsync();
// Connexion à 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();
// Opérations sur les données
await db.StringSetAsync("key", "value");
var value = await db.StringGetAsync("key");
SDK associés
| SDK | Objectif | Installer |
|---|---|---|
StackExchange.Redis |
Plan de données (get/set, pub/sub, flux) | dotnet add package StackExchange.Redis |
Azure.ResourceManager.Redis |
Plan de gestion (ce SDK) | dotnet add package Azure.ResourceManager.Redis |
Microsoft.Azure.StackExchangeRedis |
Extensions Redis spécifiques à 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` |
Tous les fichiers
0 fichiersInstaller azure-resource-manager-redis-dotnet
Téléchargez et décompressez les fichiers de compétences dans votre répertoire .claude/skills/.
Télécharger le ZIPClonez le dépôt et copiez les fichiers de compétence dans votre projet.
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
Copier





Maison
