Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Une commande directe contourne le prompt de vérification. Examinez la source avant de l'exécuter.
Current Version: 1.5.1 (Stable) API Version: 2024-11-01 Target Frameworks: .NET 8.0, .NET Standard 2.0
Environment Variables
AZURE_SUBSCRIPTION_ID=<your-subscription-id>
# For service principal auth (optional)
AZURE_TENANT_ID=<tenant-id>
AZURE_CLIENT_ID=<client-id>
AZURE_CLIENT_SECRET=<client-secret>
Authentication
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Redis;
// Always use DefaultAzureCredentialvar credential = new DefaultAzureCredential();
var armClient = new ArmClient(credential);
// Get subscriptionvar subscriptionId = Environment.GetEnvironmentVariable("AZURE_SUBSCRIPTION_ID");
var subscription = armClient.GetSubscriptionResource(
new ResourceIdentifier($"/subscriptions/{subscriptionId}"));
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
// Create firewall rulevar 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 rulesawaitforeach (var rule in firewallCollection.GetAllAsync())
{
Console.WriteLine($"Rule: {rule.Data.Name} ({rule.Data.StartIP} - {rule.Data.EndIP})");
}
// Delete firewall rulevar ruleToDelete = await firewallCollection.GetAsync("allow-internal-network");
await ruleToDelete.Value.DeleteAsync(WaitUntil.Completed);
8. Configure Patch Schedule (Premium SKU)
// Patch schedules require Premium SKUvar 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)
// Import data from blob storagevar 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 storagevar 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
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
Use WaitUntil.Completed for operations that must finish before proceeding
Use WaitUntil.Started when you want to poll manually or run operations in parallel
Always use DefaultAzureCredential — never hardcode keys
Handle RequestFailedException for ARM API errors
Use CreateOrUpdateAsync for idempotent operations
Navigate hierarchy via Get* methods (e.g., cache.GetRedisFirewallRules())
Use Premium SKU for production workloads requiring geo-replication, clustering, or persistence
Enable TLS 1.2 minimum — set MinimumTlsVersion = RedisTlsVersion.Tls1_2
Disable non-SSL port — set EnableNonSslPort = false for security
Rotate keys regularly — use RegenerateKeyAsync and update connection strings
SKU downgrades not allowed — You cannot downgrade from Premium to Standard/Basic
Clustering requires Premium — Shard configuration only available on Premium SKU
Geo-replication requires Premium — Linked servers only work with Premium caches
VNet injection requires Premium — Virtual network support is Premium-only
Patch schedules require Premium — Maintenance windows only configurable on Premium
Cache name globally unique — Redis cache names must be unique across all Azure subscriptions
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:
using StackExchange.Redis;
// Get connection info from management SDKvar cache = await resourceGroup.Value.GetRedisAsync("my-redis-cache");
var keys = await cache.Value.GetKeysAsync();
// Connect with StackExchange.Redisvar 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 operationsawait db.StringSetAsync("key", "value");
varvalue = await db.StringGetAsync("key");