вариант
ДомДом Skill DevOps и CI/CD azure-resource-manager-redis-dotnet

azure-resource-manager-redis-dotnet

microsoft/skills microsoft/skills

Управляйте экземплярами Azure Cache for Redis с помощью SDK Azure Resource Manager для .NET, включая создание, настройку правил брандмауэра, управление ключами доступа, планирование установки исправлений, георепликацию и частные конечные точки.

...Расширить все
3
Обновлено время 18 сентября 2026 г.

Azure.ResourceManager.Redis (.NET)

SDK уровня управления для развертывания и управления ресурсами Azure Cache for Redis с помощью Azure Resource Manager.

⚠️ Уровень управления и уровень данных

  • Этот SDK (Azure.ResourceManager.Redis): создание кэшей, настройка правил брандмауэра, управление ключами доступа, настройка георепликации
  • SDK уровня данных (StackExchange.Redis): получение/установка ключей, модель «pub/sub», потоки, скрипты Lua

Установка

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

Текущая версия: 1.5.1 (стабильная)
Версия API: 2024-11-01
Целевые платформы: .NET 8.0, .NET Standard 2.0

Переменные среды

AZURE_SUBSCRIPTION_ID= # Обязательно: ID подписки Azure
AZURE_TOKEN_CREDENTIALS=prod  # Требуется только в том случае, если DefaultAzureCredential используется в производственной среде
AZURE_TENANT_ID= # Для аутентификации субъекта службы (необязательно)
AZURE_CLIENT_ID= # Для аутентификации с помощью субъекта службы (необязательно)
AZURE_CLIENT_SECRET= # Для аутентификации с помощью субъекта службы (необязательно)

Аутентификация

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

// Локальная разработка: DefaultAzureCredential. Производственная среда: установите AZURE_TOKEN_CREDENTIALS=prod или AZURE_TOKEN_CREDENTIALS=
var credential = new DefaultAzureCredential(
    DefaultAzureCredential.DefaultEnvironmentVariableName
);
// Или используйте конкретные учетные данные напрямую в производственной среде:
// См. https://learn.microsoft.com/dotnet/api/overview/azure/identity-readme?view=azure-dotnet#credential-classes
// var credential = new ManagedIdentityCredential();
var armClient = new ArmClient(credential);

// Получить подписку
var subscriptionId = Environment.GetEnvironmentVariable("AZURE_SUBSCRIPTION_ID");
var subscription = armClient.GetSubscriptionResource(
    new ResourceIdentifier($"/subscriptions/{subscriptionId}"));

Иерархия ресурсов

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

Основные рабочие процессы

1. Создание кэша Redis

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

// Получить группу ресурсов
var resourceGroup = await subscription
    .GetResourceGroupAsync("my-resource-group");

// Определить конфигурацию кэша
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"
    }
};

// Создание кэша (длительная операция)
var cacheCollection = resourceGroup.Value.GetAllRedis();
var operation = await cacheCollection.CreateOrUpdateAsync(
    WaitUntil.Completed,
    "my-redis-cache",
    cacheData);

RedisResource cache = operation.Value;
Console.WriteLine($"Кэш создан: {cache.Data.HostName}");

2. Получение кеша Redis

// Получение существующего кэша
var cache = await resourceGroup.Value
    .GetRedisAsync("my-redis-cache");

Console.WriteLine($"Хост: {cache.Value.Data.HostName}");
Console.WriteLine($"Порт: {cache.Value.Data.Port}");
Console.WriteLine($"Порт SSL: {cache.Value.Data.SslPort}");
Console.WriteLine($"Состояние подготовки: {cache.Value.Data.ProvisioningState}");

3. Обновление кэша 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. Удаление кеша Redis

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

5. Получение ключей доступа

var keys = await cache.Value.GetKeysAsync();
Console.WriteLine($"Основной ключ: {keys.Value.PrimaryKey}");
Console.WriteLine($"Вторичный ключ: {keys.Value.SecondaryKey}");

6. Перегенерировать ключи доступа

var regenerateContent = new RedisRegenerateKeyContent(RedisRegenerateKeyType.Primary);
var newKeys = await cache.Value.RegenerateKeyAsync(regenerateContent);
Console.WriteLine($"Новый первичный ключ: {newKeys.Value.PrimaryKey}");

7. Управление правилами брандмауэра

// Создать правило брандмауэра
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);

// Вывести список всех правил брандмауэра
await foreach (var rule in firewallCollection.GetAllAsync())
{
    Console.WriteLine($"Правило: {rule.Data.Name} ({rule.Data.StartIP} - {rule.Data.EndIP})");
}

// Удалить правило брандмауэра
var ruleToDelete = await firewallCollection.GetAsync("allow-internal-network");
await ruleToDelete.Value.DeleteAsync(WaitUntil.Completed);

8. Настройка расписания патчей (версия Premium)

// Для расписаний обновлений требуется версия Premium
var scheduleData = new RedisPatchScheduleData(
    new[]
    {
        new RedisPatchScheduleSetting(RedisDayOfWeek.Saturday, 2) // 2:00 субботы
        {
            MaintenanceWindow = TimeSpan.FromHours(5)
        },
        new RedisPatchScheduleSetting(RedisDayOfWeek.Sunday, 2) // 2:00 воскресенья
        {
            MaintenanceWindow = TimeSpan.FromHours(5)
        }
    });

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

9. Импорт/экспорт данных (версия Premium)

// Импорт данных из хранилища BLOB
var importContent = new ImportRdbContent(
    files: new[] { "https://mystorageaccount.blob.core.windows.net/container/dump.rdb" },
    format: "RDB");

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

// Экспорт данных в хранилище BLOB
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. Принудительная перезагрузка

var rebootContent = new RedisRebootContent
{
    RebootType = RedisRebootType.AllNodes,
    ShardId = 0 // Для кластерных кэшей
};

await cache.Value.ForceRebootAsync(rebootContent);

Справочник SKU

SKU Семейство Емкость Особенности
Базовые C 0–6 Один узел, без SLA, только для разработки и тестирования
Стандартный C 0–6 Два узла (основной/реплика), SLA
Премиум P 1–5 Кластеризация, георепликация, VNet, сохранность данных

Размеры емкости (семейство C — Basic/Standard):

  • C0: 250 МБ
  • C1: 1 ГБ
  • C2: 2,5 ГБ
  • C3: 6 ГБ
  • C4: 13 ГБ
  • C5: 26 ГБ
  • C6: 53 ГБ

Размеры емкости (серия P — Premium):

  • P1: 6 ГБ на каждый шард
  • P2: 13 ГБ на шард
  • P3: 26 ГБ на шард
  • P4: 53 ГБ на шард
  • P5: 120 ГБ на шард

Справочник типов ключей

Тип Назначение
ArmClient Точка входа для всех операций ARM
RedisResource Представляет экземпляр кэша Redis
RedisCollection Коллекция для операций CRUD с кешем
RedisFirewallRuleResource Правило брандмауэра для фильтрации по IP
RedisPatchScheduleResource Настройка окна технического обслуживания
RedisLinkedServerWithPropertyResource Связанный сервер с георепликацией
RedisPrivateEndpointConnectionResource Подключение к частной конечной точке
RedisCacheAccessPolicyResource Политика доступа RBAC
RedisCreateOrUpdateContent Данные для создания кэша
RedisPatch Поле данных обновления кэша
RedisSku Конфигурация SKU (название, серия, емкость)
RedisAccessKeys Основной и дополнительный ключи доступа
RedisRegenerateKeyContent Запрос на регенерацию ключа

Рекомендации

  1. Используйте WaitUntil.Completed для операций, которые должны завершиться перед продолжением
  2. Используйте WaitUntil.Started, если вы хотите выполнять опрос вручную или запускать операции параллельно
  3. Всегда используйте DefaultAzureCredential — никогда не указывайте ключи напрямую
  4. Обрабатывайте исключение RequestFailedException при ошибках API ARM
  5. Используйте CreateOrUpdateAsync для идемпотентных операций
  6. Перемещайтесь по иерархии с помощью методов Get* (например, cache.GetRedisFirewallRules())
  7. Используйте SKU «Premium» для производственных рабочих нагрузок, требующих георепликации, кластеризации или обеспечения сохранности данных
  8. Включите как минимум TLS 1.2 — установите MinimumTlsVersion = RedisTlsVersion.Tls1_2
  9. Отключите порт без SSL — в целях безопасности установите EnableNonSslPort = false
  10. Регулярно обновляйте ключи — используйте RegenerateKeyAsync и обновляйте строки подключения

Обработка ошибок

using Azure;

try
{
    var operation = await cacheCollection.CreateOrUpdateAsync(
        WaitUntil.Completed, cacheName, cacheData);
}
catch (RequestFailedException ex) when (ex.Status == 409)
{
    Console.WriteLine("Кэш уже существует");
}
catch (RequestFailedException ex) when (ex.Status == 400)
{
    Console.WriteLine($"Неверная конфигурация: {ex.Message}");
}
catch (RequestFailedException ex)
{
    Console.WriteLine($"Ошибка ARM: {ex.Status} - {ex.ErrorCode}: {ex.Message}");
}

Распространённые ошибки

  1. Понижение уровня SKU не допускается — невозможно перейти с уровня «Premium» на «Standard» или «Basic»
  2. Для кластеризации требуется SKU «Premium» — настройка шардов доступна только в SKU «Premium»
  3. Для георепликации требуется SKU «Premium» — связанные серверы работают только с кэшами SKU «Premium»
  4. Для подключения к виртуальной сети требуется SKU «Premium» — поддержка виртуальных сетей доступна только в SKU «Premium»
  5. Для планирования установки обновлений требуется тарифный план «Premium» — окна технического обслуживания можно настраивать только на тарифном плане «Premium»
  6. Имя кэша должно бытьглобально уникальным — имена кэшей Redis должны быть уникальными во всех подписках Azure
  7. Длительное время развертывания — создание кэша может занять 15–20 минут; для асинхронных сценариев используйте WaitUntil.Started

Подключение с помощью StackExchange.Redis (уровень обработки данных)

После создания кэша с помощью этого SDK для управления используйте StackExchange.Redis для работы с данными:

using StackExchange.Redis;

// Получить информацию о подключении из SDK для управления
var cache = await resourceGroup.Value.GetRedisAsync("my-redis-cache");
var keys = await cache.Value.GetKeysAsync();

// Подключение к 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();

// Операции с данными
await db.StringSetAsync("key", "value");
var value = await db.StringGetAsync("key");

Связанные SDK

SDK Назначение Установка
StackExchange.Redis Уровень данных (get/set, pub/sub, потоки) dotnet add package StackExchange.Redis
Azure.ResourceManager.Redis Уровня управления (этот SDK) dotnet add package Azure.ResourceManager.Redis
Microsoft.Azure.StackExchangeRedis Расширения Redis, специфичные для Azure dotnet add package Microsoft.Azure.StackExchangeRedis
Посмотреть на 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` |

Все файлы

0 файлов

Установить azure-resource-manager-redis-dotnet

Скачайте файлы навыков и распакуйте их в каталог .claude/skills/.

Скачать ZIP

Клонируйте репозиторий и скопируйте файлы навыка в свой проект.

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

Копировать Копировать
Быстрая настройка: Скопируйте папку со скиллом в .claude/skills/ Claude автоматически обнаружит и запустит этот скилл
Репозиторий microsoft/skills

Похожие навыки

Verification &amp; Quality Assurance
Обновлено время 29 июня 2026 г.
base44-cli
Обновлено время 29 июня 2026 г.
klingai-upgrade-migration
Обновлено время 3 июля 2026 г.
Railway CLI Management
Обновлено время 2 июля 2026 г.
OR