Azure Resource Manager Redis Dotnet

作者 microsoft354361d83247MIT收录于 2026年10月8日更新于 2026年10月8日

Azure Resource Manager SDK for Redis in .NET. Use for MANAGEMENT PLANE operations: creating/managing Azure Cache for Redis instances, firewall rules, access keys, patch schedules, linked servers (geo-replication), and private endpoints via Azure Resource Manager. NOT for data plane operations (get/set keys, pub/sub) - use StackExchange.Redis for that. Triggers: "Redis cache", "create Redis", "manage Redis", "ARM Redis", "RedisResource", "provision Redis", "Azure Cache for Redis".

精选仅含说明DevOps & Cloud
AI 生成的概览

指导使用 Azure Resource Manager SDK 在 .NET 中管理 Azure Cache for Redis 的预配与管理操作。

功能
提供使用 Azure.ResourceManager.Redis SDK 创建、读取、更新和删除 Azure Cache for Redis 实例的 C# 指导与代码示例。内容涵盖防火墙规则、访问密钥获取与重新生成、修补计划、导入导出、强制重启、异地复制链接服务器和专用终结点,并包含 SKU 与类型参考、错误处理和常见陷阱。还演示如何用 StackExchange.Redis 连接已创建的缓存以执行数据平面操作。
适用场景
适用于编写通过 Azure Resource Manager 预配或管理 Azure Cache for Redis 资源的 .NET 代码,例如创建缓存、配置防火墙规则或修补计划、轮换访问密钥。不适用于数据平面操作(如 get/set、发布订阅、流),这些应使用 StackExchange.Redis。
运行要求
需要 .NET SDK 以及 Azure.ResourceManager.Redis 和 Azure.Identity NuGet 包,一个 Azure 订阅,以及 Azure 凭据(DefaultAzureCredential 或通过 AZURE_SUBSCRIPTION_ID、AZURE_TENANT_ID、AZURE_CLIENT_ID、AZURE_CLIENT_SECRET 配置的服务主体)。需要访问 Azure Resource Manager 的网络。仅为说明文档,不附带脚本。

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.Redisdotnet 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 IDAZURE_TOKEN_CREDENTIALS=prod  # Required only if DefaultAzureCredential is used in productionAZURE_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 subscriptionvar 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 groupvar resourceGroup = await subscription    .GetResourceGroupAsync("my-resource-group");
// Define cache configurationvar 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 cachevar 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 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 rulesawait foreach (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)

csharp
// 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)

csharp
// 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

csharp
var rebootContent = new RedisRebootContent{    RebootType = RedisRebootType.AllNodes,    ShardId = 0 // For clustered caches};
await cache.Value.ForceRebootAsync(rebootContent);

SKU Reference

SKUFamilyCapacityFeatures
BasicC0-6Single node, no SLA, dev/test only
StandardC0-6Two nodes (primary/replica), SLA
PremiumP1-5Clustering, 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

TypePurpose
ArmClientEntry point for all ARM operations
RedisResourceRepresents a Redis cache instance
RedisCollectionCollection for cache CRUD operations
RedisFirewallRuleResourceFirewall rule for IP filtering
RedisPatchScheduleResourceMaintenance window configuration
RedisLinkedServerWithPropertyResourceGeo-replication linked server
RedisPrivateEndpointConnectionResourcePrivate endpoint connection
RedisCacheAccessPolicyResourceRBAC access policy
RedisCreateOrUpdateContentCache creation payload
RedisPatchCache update payload
RedisSkuSKU configuration (name, family, capacity)
RedisAccessKeysPrimary and secondary access keys
RedisRegenerateKeyContentKey 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 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");var value = await db.StringGetAsync("key");

Related SDKs

SDKPurposeInstall
StackExchange.RedisData plane (get/set, pub/sub, streams)dotnet add package StackExchange.Redis
Azure.ResourceManager.RedisManagement plane (this SDK)dotnet add package Azure.ResourceManager.Redis
Microsoft.Azure.StackExchangeRedisAzure-specific Redis extensionsdotnet add package Microsoft.Azure.StackExchangeRedis

来源与署名

来源:microsoft/skills位于.github/plugins/azure-sdk-dotnet/skills/azure-resource-manager-redis-dotnet提交354361d

许可证: MIT

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架