[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-azure-resource-manager-redis-dotnet":3,"mdc--yvc89v-key":45,"related-org-microsoft-azure-resource-manager-redis-dotnet":2714,"related-repo-microsoft-azure-resource-manager-redis-dotnet":2902},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":28,"repoUrl":29,"updatedAt":30,"license":31,"forks":32,"topics":33,"repo":40,"sourceUrl":43,"mdContent":44},"azure-resource-manager-redis-dotnet","manage Azure Cache for Redis in .NET","Azure Resource Manager SDK for Redis in .NET. Use for MANAGEMENT PLANE operations: creating\u002Fmanaging 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\u002Fset keys, pub\u002Fsub) - use StackExchange.Redis for that. Triggers: \"Redis cache\", \"create Redis\", \"manage Redis\", \"ARM Redis\", \"RedisResource\", \"provision Redis\", \"Azure Cache for Redis\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"microsoft","Microsoft","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmicrosoft.png",[12,16,19,22,25],{"name":13,"slug":14,"type":15},"Azure","azure","tag",{"name":17,"slug":18,"type":15},"Management","management",{"name":20,"slug":21,"type":15},".NET","net",{"name":23,"slug":24,"type":15},"Database","database",{"name":26,"slug":27,"type":15},"Redis","redis",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-07-03T16:32:08.939662","MIT",315,[34,35,14,36,37,38,39],"agent-skills","agents","foundry","mcp","sdk","skills",{"repoUrl":29,"stars":28,"forks":32,"topics":41,"description":42},[34,35,14,36,37,38,39],"Skills, MCP servers, Custom Agents, Agents.md for SDKs to ground Coding Agents","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Ftree\u002FHEAD\u002F.github\u002Fplugins\u002Fazure-sdk-dotnet\u002Fskills\u002Fazure-resource-manager-redis-dotnet","---\nname: azure-resource-manager-redis-dotnet\ndescription: |\n  Azure Resource Manager SDK for Redis in .NET. Use for MANAGEMENT PLANE operations: creating\u002Fmanaging 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\u002Fset keys, pub\u002Fsub) - use StackExchange.Redis for that. Triggers: \"Redis cache\", \"create Redis\", \"manage Redis\", \"ARM Redis\", \"RedisResource\", \"provision Redis\", \"Azure Cache for Redis\".\nlicense: MIT\nmetadata:\n  author: Microsoft\n  version: \"1.0.0\"\n  package: Azure.ResourceManager.Redis\n---\n\n# Azure.ResourceManager.Redis (.NET)\n\nManagement plane SDK for provisioning and managing Azure Cache for Redis resources via Azure Resource Manager.\n\n> **⚠️ Management vs Data Plane**\n> - **This SDK (Azure.ResourceManager.Redis)**: Create caches, configure firewall rules, manage access keys, set up geo-replication\n> - **Data Plane SDK (StackExchange.Redis)**: Get\u002Fset keys, pub\u002Fsub, streams, Lua scripts\n\n## Installation\n\n```bash\ndotnet add package Azure.ResourceManager.Redis\ndotnet add package Azure.Identity\n```\n\n**Current Version**: 1.5.1 (Stable)  \n**API Version**: 2024-11-01  \n**Target Frameworks**: .NET 8.0, .NET Standard 2.0\n\n## Environment Variables\n\n```bash\nAZURE_SUBSCRIPTION_ID=\u003Cyour-subscription-id>  # Required: Azure subscription ID\nAZURE_TOKEN_CREDENTIALS=prod  # Required only if DefaultAzureCredential is used in production\nAZURE_TENANT_ID=\u003Ctenant-id>  # For service principal auth (optional)\nAZURE_CLIENT_ID=\u003Cclient-id>  # For service principal auth (optional)\nAZURE_CLIENT_SECRET=\u003Cclient-secret>  # For service principal auth (optional)\n```\n\n## Authentication\n\n```csharp\nusing Azure.Identity;\nusing Azure.ResourceManager;\nusing Azure.ResourceManager.Redis;\n\n\u002F\u002F Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=\u003Cspecific_credential>\nvar credential = new DefaultAzureCredential(\n    DefaultAzureCredential.DefaultEnvironmentVariableName\n);\n\u002F\u002F Or use a specific credential directly in production:\n\u002F\u002F See https:\u002F\u002Flearn.microsoft.com\u002Fdotnet\u002Fapi\u002Foverview\u002Fazure\u002Fidentity-readme?view=azure-dotnet#credential-classes\n\u002F\u002F var credential = new ManagedIdentityCredential();\nvar armClient = new ArmClient(credential);\n\n\u002F\u002F Get subscription\nvar subscriptionId = Environment.GetEnvironmentVariable(\"AZURE_SUBSCRIPTION_ID\");\nvar subscription = armClient.GetSubscriptionResource(\n    new ResourceIdentifier($\"\u002Fsubscriptions\u002F{subscriptionId}\"));\n```\n\n## Resource Hierarchy\n\n```\nArmClient\n└── SubscriptionResource\n    └── ResourceGroupResource\n        └── RedisResource\n            ├── RedisFirewallRuleResource\n            ├── RedisPatchScheduleResource\n            ├── RedisLinkedServerWithPropertyResource\n            ├── RedisPrivateEndpointConnectionResource\n            └── RedisCacheAccessPolicyResource\n```\n\n## Core Workflows\n\n### 1. Create Redis Cache\n\n```csharp\nusing Azure.ResourceManager.Redis;\nusing Azure.ResourceManager.Redis.Models;\n\n\u002F\u002F Get resource group\nvar resourceGroup = await subscription\n    .GetResourceGroupAsync(\"my-resource-group\");\n\n\u002F\u002F Define cache configuration\nvar cacheData = new RedisCreateOrUpdateContent(\n    location: AzureLocation.EastUS,\n    sku: new RedisSku(RedisSkuName.Standard, RedisSkuFamily.BasicOrStandard, 1))\n{\n    EnableNonSslPort = false,\n    MinimumTlsVersion = RedisTlsVersion.Tls1_2,\n    RedisConfiguration = new RedisCommonConfiguration\n    {\n        MaxMemoryPolicy = \"volatile-lru\"\n    },\n    Tags =\n    {\n        [\"environment\"] = \"production\"\n    }\n};\n\n\u002F\u002F Create cache (long-running operation)\nvar cacheCollection = resourceGroup.Value.GetAllRedis();\nvar operation = await cacheCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"my-redis-cache\",\n    cacheData);\n\nRedisResource cache = operation.Value;\nConsole.WriteLine($\"Cache created: {cache.Data.HostName}\");\n```\n\n### 2. Get Redis Cache\n\n```csharp\n\u002F\u002F Get existing cache\nvar cache = await resourceGroup.Value\n    .GetRedisAsync(\"my-redis-cache\");\n\nConsole.WriteLine($\"Host: {cache.Value.Data.HostName}\");\nConsole.WriteLine($\"Port: {cache.Value.Data.Port}\");\nConsole.WriteLine($\"SSL Port: {cache.Value.Data.SslPort}\");\nConsole.WriteLine($\"Provisioning State: {cache.Value.Data.ProvisioningState}\");\n```\n\n### 3. Update Redis Cache\n\n```csharp\nvar patchData = new RedisPatch\n{\n    Sku = new RedisSku(RedisSkuName.Standard, RedisSkuFamily.BasicOrStandard, 2),\n    RedisConfiguration = new RedisCommonConfiguration\n    {\n        MaxMemoryPolicy = \"allkeys-lru\"\n    }\n};\n\nvar updateOperation = await cache.Value.UpdateAsync(\n    WaitUntil.Completed,\n    patchData);\n```\n\n### 4. Delete Redis Cache\n\n```csharp\nawait cache.Value.DeleteAsync(WaitUntil.Completed);\n```\n\n### 5. Get Access Keys\n\n```csharp\nvar keys = await cache.Value.GetKeysAsync();\nConsole.WriteLine($\"Primary Key: {keys.Value.PrimaryKey}\");\nConsole.WriteLine($\"Secondary Key: {keys.Value.SecondaryKey}\");\n```\n\n### 6. Regenerate Access Keys\n\n```csharp\nvar regenerateContent = new RedisRegenerateKeyContent(RedisRegenerateKeyType.Primary);\nvar newKeys = await cache.Value.RegenerateKeyAsync(regenerateContent);\nConsole.WriteLine($\"New Primary Key: {newKeys.Value.PrimaryKey}\");\n```\n\n### 7. Manage Firewall Rules\n\n```csharp\n\u002F\u002F Create firewall rule\nvar firewallData = new RedisFirewallRuleData(\n    startIP: System.Net.IPAddress.Parse(\"10.0.0.1\"),\n    endIP: System.Net.IPAddress.Parse(\"10.0.0.255\"));\n\nvar firewallCollection = cache.Value.GetRedisFirewallRules();\nvar firewallOperation = await firewallCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"allow-internal-network\",\n    firewallData);\n\n\u002F\u002F List all firewall rules\nawait foreach (var rule in firewallCollection.GetAllAsync())\n{\n    Console.WriteLine($\"Rule: {rule.Data.Name} ({rule.Data.StartIP} - {rule.Data.EndIP})\");\n}\n\n\u002F\u002F Delete firewall rule\nvar ruleToDelete = await firewallCollection.GetAsync(\"allow-internal-network\");\nawait ruleToDelete.Value.DeleteAsync(WaitUntil.Completed);\n```\n\n### 8. Configure Patch Schedule (Premium SKU)\n\n```csharp\n\u002F\u002F Patch schedules require Premium SKU\nvar scheduleData = new RedisPatchScheduleData(\n    new[]\n    {\n        new RedisPatchScheduleSetting(RedisDayOfWeek.Saturday, 2) \u002F\u002F 2 AM Saturday\n        {\n            MaintenanceWindow = TimeSpan.FromHours(5)\n        },\n        new RedisPatchScheduleSetting(RedisDayOfWeek.Sunday, 2) \u002F\u002F 2 AM Sunday\n        {\n            MaintenanceWindow = TimeSpan.FromHours(5)\n        }\n    });\n\nvar scheduleCollection = cache.Value.GetRedisPatchSchedules();\nawait scheduleCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    RedisPatchScheduleDefaultName.Default,\n    scheduleData);\n```\n\n### 9. Import\u002FExport Data (Premium SKU)\n\n```csharp\n\u002F\u002F Import data from blob storage\nvar importContent = new ImportRdbContent(\n    files: new[] { \"https:\u002F\u002Fmystorageaccount.blob.core.windows.net\u002Fcontainer\u002Fdump.rdb\" },\n    format: \"RDB\");\n\nawait cache.Value.ImportDataAsync(WaitUntil.Completed, importContent);\n\n\u002F\u002F Export data to blob storage\nvar exportContent = new ExportRdbContent(\n    prefix: \"backup\",\n    container: \"https:\u002F\u002Fmystorageaccount.blob.core.windows.net\u002Fcontainer?sastoken\",\n    format: \"RDB\");\n\nawait cache.Value.ExportDataAsync(WaitUntil.Completed, exportContent);\n```\n\n### 10. Force Reboot\n\n```csharp\nvar rebootContent = new RedisRebootContent\n{\n    RebootType = RedisRebootType.AllNodes,\n    ShardId = 0 \u002F\u002F For clustered caches\n};\n\nawait cache.Value.ForceRebootAsync(rebootContent);\n```\n\n## SKU Reference\n\n| SKU | Family | Capacity | Features |\n|-----|--------|----------|----------|\n| Basic | C | 0-6 | Single node, no SLA, dev\u002Ftest only |\n| Standard | C | 0-6 | Two nodes (primary\u002Freplica), SLA |\n| Premium | P | 1-5 | Clustering, geo-replication, VNet, persistence |\n\n**Capacity Sizes (Family C - Basic\u002FStandard)**:\n- C0: 250 MB\n- C1: 1 GB\n- C2: 2.5 GB\n- C3: 6 GB\n- C4: 13 GB\n- C5: 26 GB\n- C6: 53 GB\n\n**Capacity Sizes (Family P - Premium)**:\n- P1: 6 GB per shard\n- P2: 13 GB per shard\n- P3: 26 GB per shard\n- P4: 53 GB per shard\n- P5: 120 GB per shard\n\n## Key Types Reference\n\n| Type | Purpose |\n|------|---------|\n| `ArmClient` | Entry point for all ARM operations |\n| `RedisResource` | Represents a Redis cache instance |\n| `RedisCollection` | Collection for cache CRUD operations |\n| `RedisFirewallRuleResource` | Firewall rule for IP filtering |\n| `RedisPatchScheduleResource` | Maintenance window configuration |\n| `RedisLinkedServerWithPropertyResource` | Geo-replication linked server |\n| `RedisPrivateEndpointConnectionResource` | Private endpoint connection |\n| `RedisCacheAccessPolicyResource` | RBAC access policy |\n| `RedisCreateOrUpdateContent` | Cache creation payload |\n| `RedisPatch` | Cache update payload |\n| `RedisSku` | SKU configuration (name, family, capacity) |\n| `RedisAccessKeys` | Primary and secondary access keys |\n| `RedisRegenerateKeyContent` | Key regeneration request |\n\n## Best Practices\n\n1. **Use `WaitUntil.Completed`** for operations that must finish before proceeding\n2. **Use `WaitUntil.Started`** when you want to poll manually or run operations in parallel\n3. **Always use `DefaultAzureCredential`** — never hardcode keys\n4. **Handle `RequestFailedException`** for ARM API errors\n5. **Use `CreateOrUpdateAsync`** for idempotent operations\n6. **Navigate hierarchy** via `Get*` methods (e.g., `cache.GetRedisFirewallRules()`)\n7. **Use Premium SKU** for production workloads requiring geo-replication, clustering, or persistence\n8. **Enable TLS 1.2 minimum** — set `MinimumTlsVersion = RedisTlsVersion.Tls1_2`\n9. **Disable non-SSL port** — set `EnableNonSslPort = false` for security\n10. **Rotate keys regularly** — use `RegenerateKeyAsync` and update connection strings\n\n## Error Handling\n\n```csharp\nusing Azure;\n\ntry\n{\n    var operation = await cacheCollection.CreateOrUpdateAsync(\n        WaitUntil.Completed, cacheName, cacheData);\n}\ncatch (RequestFailedException ex) when (ex.Status == 409)\n{\n    Console.WriteLine(\"Cache already exists\");\n}\ncatch (RequestFailedException ex) when (ex.Status == 400)\n{\n    Console.WriteLine($\"Invalid configuration: {ex.Message}\");\n}\ncatch (RequestFailedException ex)\n{\n    Console.WriteLine($\"ARM Error: {ex.Status} - {ex.ErrorCode}: {ex.Message}\");\n}\n```\n\n## Common Pitfalls\n\n1. **SKU downgrades not allowed** — You cannot downgrade from Premium to Standard\u002FBasic\n2. **Clustering requires Premium** — Shard configuration only available on Premium SKU\n3. **Geo-replication requires Premium** — Linked servers only work with Premium caches\n4. **VNet injection requires Premium** — Virtual network support is Premium-only\n5. **Patch schedules require Premium** — Maintenance windows only configurable on Premium\n6. **Cache name globally unique** — Redis cache names must be unique across all Azure subscriptions\n7. **Long provisioning times** — Cache creation can take 15-20 minutes; use `WaitUntil.Started` for async patterns\n\n## Connecting with StackExchange.Redis (Data Plane)\n\nAfter creating the cache with this management SDK, use StackExchange.Redis for data operations:\n\n```csharp\nusing StackExchange.Redis;\n\n\u002F\u002F Get connection info from management SDK\nvar cache = await resourceGroup.Value.GetRedisAsync(\"my-redis-cache\");\nvar keys = await cache.Value.GetKeysAsync();\n\n\u002F\u002F Connect with StackExchange.Redis\nvar connectionString = $\"{cache.Value.Data.HostName}:{cache.Value.Data.SslPort},password={keys.Value.PrimaryKey},ssl=True,abortConnect=False\";\nvar connection = ConnectionMultiplexer.Connect(connectionString);\nvar db = connection.GetDatabase();\n\n\u002F\u002F Data operations\nawait db.StringSetAsync(\"key\", \"value\");\nvar value = await db.StringGetAsync(\"key\");\n```\n\n## Related SDKs\n\n| SDK | Purpose | Install |\n|-----|---------|---------|\n| `StackExchange.Redis` | Data plane (get\u002Fset, pub\u002Fsub, streams) | `dotnet add package StackExchange.Redis` |\n| `Azure.ResourceManager.Redis` | Management plane (this SDK) | `dotnet add package Azure.ResourceManager.Redis` |\n| `Microsoft.Azure.StackExchangeRedis` | Azure-specific Redis extensions | `dotnet add package Microsoft.Azure.StackExchangeRedis` |\n",{"data":46,"body":50},{"name":4,"description":6,"license":31,"metadata":47},{"author":9,"version":48,"package":49},"1.0.0","Azure.ResourceManager.Redis",{"type":51,"children":52},"root",[53,62,68,106,113,174,205,211,351,357,514,520,530,536,543,824,830,900,906,1002,1008,1022,1028,1059,1065,1096,1102,1264,1270,1424,1430,1545,1551,1611,1617,1722,1732,1770,1779,1807,1813,2056,2062,2231,2237,2387,2393,2473,2479,2484,2599,2605,2708],{"type":54,"tag":55,"props":56,"children":58},"element","h1",{"id":57},"azureresourcemanagerredis-net",[59],{"type":60,"value":61},"text","Azure.ResourceManager.Redis (.NET)",{"type":54,"tag":63,"props":64,"children":65},"p",{},[66],{"type":60,"value":67},"Management plane SDK for provisioning and managing Azure Cache for Redis resources via Azure Resource Manager.",{"type":54,"tag":69,"props":70,"children":71},"blockquote",{},[72,81],{"type":54,"tag":63,"props":73,"children":74},{},[75],{"type":54,"tag":76,"props":77,"children":78},"strong",{},[79],{"type":60,"value":80},"⚠️ Management vs Data Plane",{"type":54,"tag":82,"props":83,"children":84},"ul",{},[85,96],{"type":54,"tag":86,"props":87,"children":88},"li",{},[89,94],{"type":54,"tag":76,"props":90,"children":91},{},[92],{"type":60,"value":93},"This SDK (Azure.ResourceManager.Redis)",{"type":60,"value":95},": Create caches, configure firewall rules, manage access keys, set up geo-replication",{"type":54,"tag":86,"props":97,"children":98},{},[99,104],{"type":54,"tag":76,"props":100,"children":101},{},[102],{"type":60,"value":103},"Data Plane SDK (StackExchange.Redis)",{"type":60,"value":105},": Get\u002Fset keys, pub\u002Fsub, streams, Lua scripts",{"type":54,"tag":107,"props":108,"children":110},"h2",{"id":109},"installation",[111],{"type":60,"value":112},"Installation",{"type":54,"tag":114,"props":115,"children":120},"pre",{"className":116,"code":117,"language":118,"meta":119,"style":119},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","dotnet add package Azure.ResourceManager.Redis\ndotnet add package Azure.Identity\n","bash","",[121],{"type":54,"tag":122,"props":123,"children":124},"code",{"__ignoreMap":119},[125,153],{"type":54,"tag":126,"props":127,"children":130},"span",{"class":128,"line":129},"line",1,[131,137,143,148],{"type":54,"tag":126,"props":132,"children":134},{"style":133},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[135],{"type":60,"value":136},"dotnet",{"type":54,"tag":126,"props":138,"children":140},{"style":139},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[141],{"type":60,"value":142}," add",{"type":54,"tag":126,"props":144,"children":145},{"style":139},[146],{"type":60,"value":147}," package",{"type":54,"tag":126,"props":149,"children":150},{"style":139},[151],{"type":60,"value":152}," Azure.ResourceManager.Redis\n",{"type":54,"tag":126,"props":154,"children":156},{"class":128,"line":155},2,[157,161,165,169],{"type":54,"tag":126,"props":158,"children":159},{"style":133},[160],{"type":60,"value":136},{"type":54,"tag":126,"props":162,"children":163},{"style":139},[164],{"type":60,"value":142},{"type":54,"tag":126,"props":166,"children":167},{"style":139},[168],{"type":60,"value":147},{"type":54,"tag":126,"props":170,"children":171},{"style":139},[172],{"type":60,"value":173}," Azure.Identity\n",{"type":54,"tag":63,"props":175,"children":176},{},[177,182,184,188,193,195,198,203],{"type":54,"tag":76,"props":178,"children":179},{},[180],{"type":60,"value":181},"Current Version",{"type":60,"value":183},": 1.5.1 (Stable)",{"type":54,"tag":185,"props":186,"children":187},"br",{},[],{"type":54,"tag":76,"props":189,"children":190},{},[191],{"type":60,"value":192},"API Version",{"type":60,"value":194},": 2024-11-01",{"type":54,"tag":185,"props":196,"children":197},{},[],{"type":54,"tag":76,"props":199,"children":200},{},[201],{"type":60,"value":202},"Target Frameworks",{"type":60,"value":204},": .NET 8.0, .NET Standard 2.0",{"type":54,"tag":107,"props":206,"children":208},{"id":207},"environment-variables",[209],{"type":60,"value":210},"Environment Variables",{"type":54,"tag":114,"props":212,"children":214},{"className":116,"code":213,"language":118,"meta":119,"style":119},"AZURE_SUBSCRIPTION_ID=\u003Cyour-subscription-id>  # Required: Azure subscription ID\nAZURE_TOKEN_CREDENTIALS=prod  # Required only if DefaultAzureCredential is used in production\nAZURE_TENANT_ID=\u003Ctenant-id>  # For service principal auth (optional)\nAZURE_CLIENT_ID=\u003Cclient-id>  # For service principal auth (optional)\nAZURE_CLIENT_SECRET=\u003Cclient-secret>  # For service principal auth (optional)\n",[215],{"type":54,"tag":122,"props":216,"children":217},{"__ignoreMap":119},[218,249,272,299,325],{"type":54,"tag":126,"props":219,"children":220},{"class":128,"line":129},[221,227,233,238,243],{"type":54,"tag":126,"props":222,"children":224},{"style":223},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[225],{"type":60,"value":226},"AZURE_SUBSCRIPTION_ID",{"type":54,"tag":126,"props":228,"children":230},{"style":229},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[231],{"type":60,"value":232},"=\u003C",{"type":54,"tag":126,"props":234,"children":235},{"style":139},[236],{"type":60,"value":237},"your-subscription-id",{"type":54,"tag":126,"props":239,"children":240},{"style":229},[241],{"type":60,"value":242},">",{"type":54,"tag":126,"props":244,"children":246},{"style":245},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[247],{"type":60,"value":248},"  # Required: Azure subscription ID\n",{"type":54,"tag":126,"props":250,"children":251},{"class":128,"line":155},[252,257,262,267],{"type":54,"tag":126,"props":253,"children":254},{"style":223},[255],{"type":60,"value":256},"AZURE_TOKEN_CREDENTIALS",{"type":54,"tag":126,"props":258,"children":259},{"style":229},[260],{"type":60,"value":261},"=",{"type":54,"tag":126,"props":263,"children":264},{"style":139},[265],{"type":60,"value":266},"prod",{"type":54,"tag":126,"props":268,"children":269},{"style":245},[270],{"type":60,"value":271},"  # Required only if DefaultAzureCredential is used in production\n",{"type":54,"tag":126,"props":273,"children":275},{"class":128,"line":274},3,[276,281,285,290,294],{"type":54,"tag":126,"props":277,"children":278},{"style":223},[279],{"type":60,"value":280},"AZURE_TENANT_ID",{"type":54,"tag":126,"props":282,"children":283},{"style":229},[284],{"type":60,"value":232},{"type":54,"tag":126,"props":286,"children":287},{"style":139},[288],{"type":60,"value":289},"tenant-id",{"type":54,"tag":126,"props":291,"children":292},{"style":229},[293],{"type":60,"value":242},{"type":54,"tag":126,"props":295,"children":296},{"style":245},[297],{"type":60,"value":298},"  # For service principal auth (optional)\n",{"type":54,"tag":126,"props":300,"children":302},{"class":128,"line":301},4,[303,308,312,317,321],{"type":54,"tag":126,"props":304,"children":305},{"style":223},[306],{"type":60,"value":307},"AZURE_CLIENT_ID",{"type":54,"tag":126,"props":309,"children":310},{"style":229},[311],{"type":60,"value":232},{"type":54,"tag":126,"props":313,"children":314},{"style":139},[315],{"type":60,"value":316},"client-id",{"type":54,"tag":126,"props":318,"children":319},{"style":229},[320],{"type":60,"value":242},{"type":54,"tag":126,"props":322,"children":323},{"style":245},[324],{"type":60,"value":298},{"type":54,"tag":126,"props":326,"children":328},{"class":128,"line":327},5,[329,334,338,343,347],{"type":54,"tag":126,"props":330,"children":331},{"style":223},[332],{"type":60,"value":333},"AZURE_CLIENT_SECRET",{"type":54,"tag":126,"props":335,"children":336},{"style":229},[337],{"type":60,"value":232},{"type":54,"tag":126,"props":339,"children":340},{"style":139},[341],{"type":60,"value":342},"client-secret",{"type":54,"tag":126,"props":344,"children":345},{"style":229},[346],{"type":60,"value":242},{"type":54,"tag":126,"props":348,"children":349},{"style":245},[350],{"type":60,"value":298},{"type":54,"tag":107,"props":352,"children":354},{"id":353},"authentication",[355],{"type":60,"value":356},"Authentication",{"type":54,"tag":114,"props":358,"children":362},{"className":359,"code":360,"language":361,"meta":119,"style":119},"language-csharp shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","using Azure.Identity;\nusing Azure.ResourceManager;\nusing Azure.ResourceManager.Redis;\n\n\u002F\u002F Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=\u003Cspecific_credential>\nvar credential = new DefaultAzureCredential(\n    DefaultAzureCredential.DefaultEnvironmentVariableName\n);\n\u002F\u002F Or use a specific credential directly in production:\n\u002F\u002F See https:\u002F\u002Flearn.microsoft.com\u002Fdotnet\u002Fapi\u002Foverview\u002Fazure\u002Fidentity-readme?view=azure-dotnet#credential-classes\n\u002F\u002F var credential = new ManagedIdentityCredential();\nvar armClient = new ArmClient(credential);\n\n\u002F\u002F Get subscription\nvar subscriptionId = Environment.GetEnvironmentVariable(\"AZURE_SUBSCRIPTION_ID\");\nvar subscription = armClient.GetSubscriptionResource(\n    new ResourceIdentifier($\"\u002Fsubscriptions\u002F{subscriptionId}\"));\n","csharp",[363],{"type":54,"tag":122,"props":364,"children":365},{"__ignoreMap":119},[366,374,382,390,399,407,416,425,434,443,452,461,470,478,487,496,505],{"type":54,"tag":126,"props":367,"children":368},{"class":128,"line":129},[369],{"type":54,"tag":126,"props":370,"children":371},{},[372],{"type":60,"value":373},"using Azure.Identity;\n",{"type":54,"tag":126,"props":375,"children":376},{"class":128,"line":155},[377],{"type":54,"tag":126,"props":378,"children":379},{},[380],{"type":60,"value":381},"using Azure.ResourceManager;\n",{"type":54,"tag":126,"props":383,"children":384},{"class":128,"line":274},[385],{"type":54,"tag":126,"props":386,"children":387},{},[388],{"type":60,"value":389},"using Azure.ResourceManager.Redis;\n",{"type":54,"tag":126,"props":391,"children":392},{"class":128,"line":301},[393],{"type":54,"tag":126,"props":394,"children":396},{"emptyLinePlaceholder":395},true,[397],{"type":60,"value":398},"\n",{"type":54,"tag":126,"props":400,"children":401},{"class":128,"line":327},[402],{"type":54,"tag":126,"props":403,"children":404},{},[405],{"type":60,"value":406},"\u002F\u002F Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=\u003Cspecific_credential>\n",{"type":54,"tag":126,"props":408,"children":410},{"class":128,"line":409},6,[411],{"type":54,"tag":126,"props":412,"children":413},{},[414],{"type":60,"value":415},"var credential = new DefaultAzureCredential(\n",{"type":54,"tag":126,"props":417,"children":419},{"class":128,"line":418},7,[420],{"type":54,"tag":126,"props":421,"children":422},{},[423],{"type":60,"value":424},"    DefaultAzureCredential.DefaultEnvironmentVariableName\n",{"type":54,"tag":126,"props":426,"children":428},{"class":128,"line":427},8,[429],{"type":54,"tag":126,"props":430,"children":431},{},[432],{"type":60,"value":433},");\n",{"type":54,"tag":126,"props":435,"children":437},{"class":128,"line":436},9,[438],{"type":54,"tag":126,"props":439,"children":440},{},[441],{"type":60,"value":442},"\u002F\u002F Or use a specific credential directly in production:\n",{"type":54,"tag":126,"props":444,"children":446},{"class":128,"line":445},10,[447],{"type":54,"tag":126,"props":448,"children":449},{},[450],{"type":60,"value":451},"\u002F\u002F See https:\u002F\u002Flearn.microsoft.com\u002Fdotnet\u002Fapi\u002Foverview\u002Fazure\u002Fidentity-readme?view=azure-dotnet#credential-classes\n",{"type":54,"tag":126,"props":453,"children":455},{"class":128,"line":454},11,[456],{"type":54,"tag":126,"props":457,"children":458},{},[459],{"type":60,"value":460},"\u002F\u002F var credential = new ManagedIdentityCredential();\n",{"type":54,"tag":126,"props":462,"children":464},{"class":128,"line":463},12,[465],{"type":54,"tag":126,"props":466,"children":467},{},[468],{"type":60,"value":469},"var armClient = new ArmClient(credential);\n",{"type":54,"tag":126,"props":471,"children":473},{"class":128,"line":472},13,[474],{"type":54,"tag":126,"props":475,"children":476},{"emptyLinePlaceholder":395},[477],{"type":60,"value":398},{"type":54,"tag":126,"props":479,"children":481},{"class":128,"line":480},14,[482],{"type":54,"tag":126,"props":483,"children":484},{},[485],{"type":60,"value":486},"\u002F\u002F Get subscription\n",{"type":54,"tag":126,"props":488,"children":490},{"class":128,"line":489},15,[491],{"type":54,"tag":126,"props":492,"children":493},{},[494],{"type":60,"value":495},"var subscriptionId = Environment.GetEnvironmentVariable(\"AZURE_SUBSCRIPTION_ID\");\n",{"type":54,"tag":126,"props":497,"children":499},{"class":128,"line":498},16,[500],{"type":54,"tag":126,"props":501,"children":502},{},[503],{"type":60,"value":504},"var subscription = armClient.GetSubscriptionResource(\n",{"type":54,"tag":126,"props":506,"children":508},{"class":128,"line":507},17,[509],{"type":54,"tag":126,"props":510,"children":511},{},[512],{"type":60,"value":513},"    new ResourceIdentifier($\"\u002Fsubscriptions\u002F{subscriptionId}\"));\n",{"type":54,"tag":107,"props":515,"children":517},{"id":516},"resource-hierarchy",[518],{"type":60,"value":519},"Resource Hierarchy",{"type":54,"tag":114,"props":521,"children":525},{"className":522,"code":524,"language":60},[523],"language-text","ArmClient\n└── SubscriptionResource\n    └── ResourceGroupResource\n        └── RedisResource\n            ├── RedisFirewallRuleResource\n            ├── RedisPatchScheduleResource\n            ├── RedisLinkedServerWithPropertyResource\n            ├── RedisPrivateEndpointConnectionResource\n            └── RedisCacheAccessPolicyResource\n",[526],{"type":54,"tag":122,"props":527,"children":528},{"__ignoreMap":119},[529],{"type":60,"value":524},{"type":54,"tag":107,"props":531,"children":533},{"id":532},"core-workflows",[534],{"type":60,"value":535},"Core Workflows",{"type":54,"tag":537,"props":538,"children":540},"h3",{"id":539},"_1-create-redis-cache",[541],{"type":60,"value":542},"1. Create Redis Cache",{"type":54,"tag":114,"props":544,"children":546},{"className":359,"code":545,"language":361,"meta":119,"style":119},"using Azure.ResourceManager.Redis;\nusing Azure.ResourceManager.Redis.Models;\n\n\u002F\u002F Get resource group\nvar resourceGroup = await subscription\n    .GetResourceGroupAsync(\"my-resource-group\");\n\n\u002F\u002F Define cache configuration\nvar cacheData = new RedisCreateOrUpdateContent(\n    location: AzureLocation.EastUS,\n    sku: new RedisSku(RedisSkuName.Standard, RedisSkuFamily.BasicOrStandard, 1))\n{\n    EnableNonSslPort = false,\n    MinimumTlsVersion = RedisTlsVersion.Tls1_2,\n    RedisConfiguration = new RedisCommonConfiguration\n    {\n        MaxMemoryPolicy = \"volatile-lru\"\n    },\n    Tags =\n    {\n        [\"environment\"] = \"production\"\n    }\n};\n\n\u002F\u002F Create cache (long-running operation)\nvar cacheCollection = resourceGroup.Value.GetAllRedis();\nvar operation = await cacheCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"my-redis-cache\",\n    cacheData);\n\nRedisResource cache = operation.Value;\nConsole.WriteLine($\"Cache created: {cache.Data.HostName}\");\n",[547],{"type":54,"tag":122,"props":548,"children":549},{"__ignoreMap":119},[550,557,565,572,580,588,596,603,611,619,627,635,643,651,659,667,675,683,692,701,709,718,727,736,744,753,762,771,780,789,798,806,815],{"type":54,"tag":126,"props":551,"children":552},{"class":128,"line":129},[553],{"type":54,"tag":126,"props":554,"children":555},{},[556],{"type":60,"value":389},{"type":54,"tag":126,"props":558,"children":559},{"class":128,"line":155},[560],{"type":54,"tag":126,"props":561,"children":562},{},[563],{"type":60,"value":564},"using Azure.ResourceManager.Redis.Models;\n",{"type":54,"tag":126,"props":566,"children":567},{"class":128,"line":274},[568],{"type":54,"tag":126,"props":569,"children":570},{"emptyLinePlaceholder":395},[571],{"type":60,"value":398},{"type":54,"tag":126,"props":573,"children":574},{"class":128,"line":301},[575],{"type":54,"tag":126,"props":576,"children":577},{},[578],{"type":60,"value":579},"\u002F\u002F Get resource group\n",{"type":54,"tag":126,"props":581,"children":582},{"class":128,"line":327},[583],{"type":54,"tag":126,"props":584,"children":585},{},[586],{"type":60,"value":587},"var resourceGroup = await subscription\n",{"type":54,"tag":126,"props":589,"children":590},{"class":128,"line":409},[591],{"type":54,"tag":126,"props":592,"children":593},{},[594],{"type":60,"value":595},"    .GetResourceGroupAsync(\"my-resource-group\");\n",{"type":54,"tag":126,"props":597,"children":598},{"class":128,"line":418},[599],{"type":54,"tag":126,"props":600,"children":601},{"emptyLinePlaceholder":395},[602],{"type":60,"value":398},{"type":54,"tag":126,"props":604,"children":605},{"class":128,"line":427},[606],{"type":54,"tag":126,"props":607,"children":608},{},[609],{"type":60,"value":610},"\u002F\u002F Define cache configuration\n",{"type":54,"tag":126,"props":612,"children":613},{"class":128,"line":436},[614],{"type":54,"tag":126,"props":615,"children":616},{},[617],{"type":60,"value":618},"var cacheData = new RedisCreateOrUpdateContent(\n",{"type":54,"tag":126,"props":620,"children":621},{"class":128,"line":445},[622],{"type":54,"tag":126,"props":623,"children":624},{},[625],{"type":60,"value":626},"    location: AzureLocation.EastUS,\n",{"type":54,"tag":126,"props":628,"children":629},{"class":128,"line":454},[630],{"type":54,"tag":126,"props":631,"children":632},{},[633],{"type":60,"value":634},"    sku: new RedisSku(RedisSkuName.Standard, RedisSkuFamily.BasicOrStandard, 1))\n",{"type":54,"tag":126,"props":636,"children":637},{"class":128,"line":463},[638],{"type":54,"tag":126,"props":639,"children":640},{},[641],{"type":60,"value":642},"{\n",{"type":54,"tag":126,"props":644,"children":645},{"class":128,"line":472},[646],{"type":54,"tag":126,"props":647,"children":648},{},[649],{"type":60,"value":650},"    EnableNonSslPort = false,\n",{"type":54,"tag":126,"props":652,"children":653},{"class":128,"line":480},[654],{"type":54,"tag":126,"props":655,"children":656},{},[657],{"type":60,"value":658},"    MinimumTlsVersion = RedisTlsVersion.Tls1_2,\n",{"type":54,"tag":126,"props":660,"children":661},{"class":128,"line":489},[662],{"type":54,"tag":126,"props":663,"children":664},{},[665],{"type":60,"value":666},"    RedisConfiguration = new RedisCommonConfiguration\n",{"type":54,"tag":126,"props":668,"children":669},{"class":128,"line":498},[670],{"type":54,"tag":126,"props":671,"children":672},{},[673],{"type":60,"value":674},"    {\n",{"type":54,"tag":126,"props":676,"children":677},{"class":128,"line":507},[678],{"type":54,"tag":126,"props":679,"children":680},{},[681],{"type":60,"value":682},"        MaxMemoryPolicy = \"volatile-lru\"\n",{"type":54,"tag":126,"props":684,"children":686},{"class":128,"line":685},18,[687],{"type":54,"tag":126,"props":688,"children":689},{},[690],{"type":60,"value":691},"    },\n",{"type":54,"tag":126,"props":693,"children":695},{"class":128,"line":694},19,[696],{"type":54,"tag":126,"props":697,"children":698},{},[699],{"type":60,"value":700},"    Tags =\n",{"type":54,"tag":126,"props":702,"children":704},{"class":128,"line":703},20,[705],{"type":54,"tag":126,"props":706,"children":707},{},[708],{"type":60,"value":674},{"type":54,"tag":126,"props":710,"children":712},{"class":128,"line":711},21,[713],{"type":54,"tag":126,"props":714,"children":715},{},[716],{"type":60,"value":717},"        [\"environment\"] = \"production\"\n",{"type":54,"tag":126,"props":719,"children":721},{"class":128,"line":720},22,[722],{"type":54,"tag":126,"props":723,"children":724},{},[725],{"type":60,"value":726},"    }\n",{"type":54,"tag":126,"props":728,"children":730},{"class":128,"line":729},23,[731],{"type":54,"tag":126,"props":732,"children":733},{},[734],{"type":60,"value":735},"};\n",{"type":54,"tag":126,"props":737,"children":739},{"class":128,"line":738},24,[740],{"type":54,"tag":126,"props":741,"children":742},{"emptyLinePlaceholder":395},[743],{"type":60,"value":398},{"type":54,"tag":126,"props":745,"children":747},{"class":128,"line":746},25,[748],{"type":54,"tag":126,"props":749,"children":750},{},[751],{"type":60,"value":752},"\u002F\u002F Create cache (long-running operation)\n",{"type":54,"tag":126,"props":754,"children":756},{"class":128,"line":755},26,[757],{"type":54,"tag":126,"props":758,"children":759},{},[760],{"type":60,"value":761},"var cacheCollection = resourceGroup.Value.GetAllRedis();\n",{"type":54,"tag":126,"props":763,"children":765},{"class":128,"line":764},27,[766],{"type":54,"tag":126,"props":767,"children":768},{},[769],{"type":60,"value":770},"var operation = await cacheCollection.CreateOrUpdateAsync(\n",{"type":54,"tag":126,"props":772,"children":774},{"class":128,"line":773},28,[775],{"type":54,"tag":126,"props":776,"children":777},{},[778],{"type":60,"value":779},"    WaitUntil.Completed,\n",{"type":54,"tag":126,"props":781,"children":783},{"class":128,"line":782},29,[784],{"type":54,"tag":126,"props":785,"children":786},{},[787],{"type":60,"value":788},"    \"my-redis-cache\",\n",{"type":54,"tag":126,"props":790,"children":792},{"class":128,"line":791},30,[793],{"type":54,"tag":126,"props":794,"children":795},{},[796],{"type":60,"value":797},"    cacheData);\n",{"type":54,"tag":126,"props":799,"children":801},{"class":128,"line":800},31,[802],{"type":54,"tag":126,"props":803,"children":804},{"emptyLinePlaceholder":395},[805],{"type":60,"value":398},{"type":54,"tag":126,"props":807,"children":809},{"class":128,"line":808},32,[810],{"type":54,"tag":126,"props":811,"children":812},{},[813],{"type":60,"value":814},"RedisResource cache = operation.Value;\n",{"type":54,"tag":126,"props":816,"children":818},{"class":128,"line":817},33,[819],{"type":54,"tag":126,"props":820,"children":821},{},[822],{"type":60,"value":823},"Console.WriteLine($\"Cache created: {cache.Data.HostName}\");\n",{"type":54,"tag":537,"props":825,"children":827},{"id":826},"_2-get-redis-cache",[828],{"type":60,"value":829},"2. Get Redis Cache",{"type":54,"tag":114,"props":831,"children":833},{"className":359,"code":832,"language":361,"meta":119,"style":119},"\u002F\u002F Get existing cache\nvar cache = await resourceGroup.Value\n    .GetRedisAsync(\"my-redis-cache\");\n\nConsole.WriteLine($\"Host: {cache.Value.Data.HostName}\");\nConsole.WriteLine($\"Port: {cache.Value.Data.Port}\");\nConsole.WriteLine($\"SSL Port: {cache.Value.Data.SslPort}\");\nConsole.WriteLine($\"Provisioning State: {cache.Value.Data.ProvisioningState}\");\n",[834],{"type":54,"tag":122,"props":835,"children":836},{"__ignoreMap":119},[837,845,853,861,868,876,884,892],{"type":54,"tag":126,"props":838,"children":839},{"class":128,"line":129},[840],{"type":54,"tag":126,"props":841,"children":842},{},[843],{"type":60,"value":844},"\u002F\u002F Get existing cache\n",{"type":54,"tag":126,"props":846,"children":847},{"class":128,"line":155},[848],{"type":54,"tag":126,"props":849,"children":850},{},[851],{"type":60,"value":852},"var cache = await resourceGroup.Value\n",{"type":54,"tag":126,"props":854,"children":855},{"class":128,"line":274},[856],{"type":54,"tag":126,"props":857,"children":858},{},[859],{"type":60,"value":860},"    .GetRedisAsync(\"my-redis-cache\");\n",{"type":54,"tag":126,"props":862,"children":863},{"class":128,"line":301},[864],{"type":54,"tag":126,"props":865,"children":866},{"emptyLinePlaceholder":395},[867],{"type":60,"value":398},{"type":54,"tag":126,"props":869,"children":870},{"class":128,"line":327},[871],{"type":54,"tag":126,"props":872,"children":873},{},[874],{"type":60,"value":875},"Console.WriteLine($\"Host: {cache.Value.Data.HostName}\");\n",{"type":54,"tag":126,"props":877,"children":878},{"class":128,"line":409},[879],{"type":54,"tag":126,"props":880,"children":881},{},[882],{"type":60,"value":883},"Console.WriteLine($\"Port: {cache.Value.Data.Port}\");\n",{"type":54,"tag":126,"props":885,"children":886},{"class":128,"line":418},[887],{"type":54,"tag":126,"props":888,"children":889},{},[890],{"type":60,"value":891},"Console.WriteLine($\"SSL Port: {cache.Value.Data.SslPort}\");\n",{"type":54,"tag":126,"props":893,"children":894},{"class":128,"line":427},[895],{"type":54,"tag":126,"props":896,"children":897},{},[898],{"type":60,"value":899},"Console.WriteLine($\"Provisioning State: {cache.Value.Data.ProvisioningState}\");\n",{"type":54,"tag":537,"props":901,"children":903},{"id":902},"_3-update-redis-cache",[904],{"type":60,"value":905},"3. Update Redis Cache",{"type":54,"tag":114,"props":907,"children":909},{"className":359,"code":908,"language":361,"meta":119,"style":119},"var patchData = new RedisPatch\n{\n    Sku = new RedisSku(RedisSkuName.Standard, RedisSkuFamily.BasicOrStandard, 2),\n    RedisConfiguration = new RedisCommonConfiguration\n    {\n        MaxMemoryPolicy = \"allkeys-lru\"\n    }\n};\n\nvar updateOperation = await cache.Value.UpdateAsync(\n    WaitUntil.Completed,\n    patchData);\n",[910],{"type":54,"tag":122,"props":911,"children":912},{"__ignoreMap":119},[913,921,928,936,943,950,958,965,972,979,987,994],{"type":54,"tag":126,"props":914,"children":915},{"class":128,"line":129},[916],{"type":54,"tag":126,"props":917,"children":918},{},[919],{"type":60,"value":920},"var patchData = new RedisPatch\n",{"type":54,"tag":126,"props":922,"children":923},{"class":128,"line":155},[924],{"type":54,"tag":126,"props":925,"children":926},{},[927],{"type":60,"value":642},{"type":54,"tag":126,"props":929,"children":930},{"class":128,"line":274},[931],{"type":54,"tag":126,"props":932,"children":933},{},[934],{"type":60,"value":935},"    Sku = new RedisSku(RedisSkuName.Standard, RedisSkuFamily.BasicOrStandard, 2),\n",{"type":54,"tag":126,"props":937,"children":938},{"class":128,"line":301},[939],{"type":54,"tag":126,"props":940,"children":941},{},[942],{"type":60,"value":666},{"type":54,"tag":126,"props":944,"children":945},{"class":128,"line":327},[946],{"type":54,"tag":126,"props":947,"children":948},{},[949],{"type":60,"value":674},{"type":54,"tag":126,"props":951,"children":952},{"class":128,"line":409},[953],{"type":54,"tag":126,"props":954,"children":955},{},[956],{"type":60,"value":957},"        MaxMemoryPolicy = \"allkeys-lru\"\n",{"type":54,"tag":126,"props":959,"children":960},{"class":128,"line":418},[961],{"type":54,"tag":126,"props":962,"children":963},{},[964],{"type":60,"value":726},{"type":54,"tag":126,"props":966,"children":967},{"class":128,"line":427},[968],{"type":54,"tag":126,"props":969,"children":970},{},[971],{"type":60,"value":735},{"type":54,"tag":126,"props":973,"children":974},{"class":128,"line":436},[975],{"type":54,"tag":126,"props":976,"children":977},{"emptyLinePlaceholder":395},[978],{"type":60,"value":398},{"type":54,"tag":126,"props":980,"children":981},{"class":128,"line":445},[982],{"type":54,"tag":126,"props":983,"children":984},{},[985],{"type":60,"value":986},"var updateOperation = await cache.Value.UpdateAsync(\n",{"type":54,"tag":126,"props":988,"children":989},{"class":128,"line":454},[990],{"type":54,"tag":126,"props":991,"children":992},{},[993],{"type":60,"value":779},{"type":54,"tag":126,"props":995,"children":996},{"class":128,"line":463},[997],{"type":54,"tag":126,"props":998,"children":999},{},[1000],{"type":60,"value":1001},"    patchData);\n",{"type":54,"tag":537,"props":1003,"children":1005},{"id":1004},"_4-delete-redis-cache",[1006],{"type":60,"value":1007},"4. Delete Redis Cache",{"type":54,"tag":114,"props":1009,"children":1011},{"className":359,"code":1010,"language":361,"meta":119,"style":119},"await cache.Value.DeleteAsync(WaitUntil.Completed);\n",[1012],{"type":54,"tag":122,"props":1013,"children":1014},{"__ignoreMap":119},[1015],{"type":54,"tag":126,"props":1016,"children":1017},{"class":128,"line":129},[1018],{"type":54,"tag":126,"props":1019,"children":1020},{},[1021],{"type":60,"value":1010},{"type":54,"tag":537,"props":1023,"children":1025},{"id":1024},"_5-get-access-keys",[1026],{"type":60,"value":1027},"5. Get Access Keys",{"type":54,"tag":114,"props":1029,"children":1031},{"className":359,"code":1030,"language":361,"meta":119,"style":119},"var keys = await cache.Value.GetKeysAsync();\nConsole.WriteLine($\"Primary Key: {keys.Value.PrimaryKey}\");\nConsole.WriteLine($\"Secondary Key: {keys.Value.SecondaryKey}\");\n",[1032],{"type":54,"tag":122,"props":1033,"children":1034},{"__ignoreMap":119},[1035,1043,1051],{"type":54,"tag":126,"props":1036,"children":1037},{"class":128,"line":129},[1038],{"type":54,"tag":126,"props":1039,"children":1040},{},[1041],{"type":60,"value":1042},"var keys = await cache.Value.GetKeysAsync();\n",{"type":54,"tag":126,"props":1044,"children":1045},{"class":128,"line":155},[1046],{"type":54,"tag":126,"props":1047,"children":1048},{},[1049],{"type":60,"value":1050},"Console.WriteLine($\"Primary Key: {keys.Value.PrimaryKey}\");\n",{"type":54,"tag":126,"props":1052,"children":1053},{"class":128,"line":274},[1054],{"type":54,"tag":126,"props":1055,"children":1056},{},[1057],{"type":60,"value":1058},"Console.WriteLine($\"Secondary Key: {keys.Value.SecondaryKey}\");\n",{"type":54,"tag":537,"props":1060,"children":1062},{"id":1061},"_6-regenerate-access-keys",[1063],{"type":60,"value":1064},"6. Regenerate Access Keys",{"type":54,"tag":114,"props":1066,"children":1068},{"className":359,"code":1067,"language":361,"meta":119,"style":119},"var regenerateContent = new RedisRegenerateKeyContent(RedisRegenerateKeyType.Primary);\nvar newKeys = await cache.Value.RegenerateKeyAsync(regenerateContent);\nConsole.WriteLine($\"New Primary Key: {newKeys.Value.PrimaryKey}\");\n",[1069],{"type":54,"tag":122,"props":1070,"children":1071},{"__ignoreMap":119},[1072,1080,1088],{"type":54,"tag":126,"props":1073,"children":1074},{"class":128,"line":129},[1075],{"type":54,"tag":126,"props":1076,"children":1077},{},[1078],{"type":60,"value":1079},"var regenerateContent = new RedisRegenerateKeyContent(RedisRegenerateKeyType.Primary);\n",{"type":54,"tag":126,"props":1081,"children":1082},{"class":128,"line":155},[1083],{"type":54,"tag":126,"props":1084,"children":1085},{},[1086],{"type":60,"value":1087},"var newKeys = await cache.Value.RegenerateKeyAsync(regenerateContent);\n",{"type":54,"tag":126,"props":1089,"children":1090},{"class":128,"line":274},[1091],{"type":54,"tag":126,"props":1092,"children":1093},{},[1094],{"type":60,"value":1095},"Console.WriteLine($\"New Primary Key: {newKeys.Value.PrimaryKey}\");\n",{"type":54,"tag":537,"props":1097,"children":1099},{"id":1098},"_7-manage-firewall-rules",[1100],{"type":60,"value":1101},"7. Manage Firewall Rules",{"type":54,"tag":114,"props":1103,"children":1105},{"className":359,"code":1104,"language":361,"meta":119,"style":119},"\u002F\u002F Create firewall rule\nvar firewallData = new RedisFirewallRuleData(\n    startIP: System.Net.IPAddress.Parse(\"10.0.0.1\"),\n    endIP: System.Net.IPAddress.Parse(\"10.0.0.255\"));\n\nvar firewallCollection = cache.Value.GetRedisFirewallRules();\nvar firewallOperation = await firewallCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"allow-internal-network\",\n    firewallData);\n\n\u002F\u002F List all firewall rules\nawait foreach (var rule in firewallCollection.GetAllAsync())\n{\n    Console.WriteLine($\"Rule: {rule.Data.Name} ({rule.Data.StartIP} - {rule.Data.EndIP})\");\n}\n\n\u002F\u002F Delete firewall rule\nvar ruleToDelete = await firewallCollection.GetAsync(\"allow-internal-network\");\nawait ruleToDelete.Value.DeleteAsync(WaitUntil.Completed);\n",[1106],{"type":54,"tag":122,"props":1107,"children":1108},{"__ignoreMap":119},[1109,1117,1125,1133,1141,1148,1156,1164,1171,1179,1187,1194,1202,1210,1217,1225,1233,1240,1248,1256],{"type":54,"tag":126,"props":1110,"children":1111},{"class":128,"line":129},[1112],{"type":54,"tag":126,"props":1113,"children":1114},{},[1115],{"type":60,"value":1116},"\u002F\u002F Create firewall rule\n",{"type":54,"tag":126,"props":1118,"children":1119},{"class":128,"line":155},[1120],{"type":54,"tag":126,"props":1121,"children":1122},{},[1123],{"type":60,"value":1124},"var firewallData = new RedisFirewallRuleData(\n",{"type":54,"tag":126,"props":1126,"children":1127},{"class":128,"line":274},[1128],{"type":54,"tag":126,"props":1129,"children":1130},{},[1131],{"type":60,"value":1132},"    startIP: System.Net.IPAddress.Parse(\"10.0.0.1\"),\n",{"type":54,"tag":126,"props":1134,"children":1135},{"class":128,"line":301},[1136],{"type":54,"tag":126,"props":1137,"children":1138},{},[1139],{"type":60,"value":1140},"    endIP: System.Net.IPAddress.Parse(\"10.0.0.255\"));\n",{"type":54,"tag":126,"props":1142,"children":1143},{"class":128,"line":327},[1144],{"type":54,"tag":126,"props":1145,"children":1146},{"emptyLinePlaceholder":395},[1147],{"type":60,"value":398},{"type":54,"tag":126,"props":1149,"children":1150},{"class":128,"line":409},[1151],{"type":54,"tag":126,"props":1152,"children":1153},{},[1154],{"type":60,"value":1155},"var firewallCollection = cache.Value.GetRedisFirewallRules();\n",{"type":54,"tag":126,"props":1157,"children":1158},{"class":128,"line":418},[1159],{"type":54,"tag":126,"props":1160,"children":1161},{},[1162],{"type":60,"value":1163},"var firewallOperation = await firewallCollection.CreateOrUpdateAsync(\n",{"type":54,"tag":126,"props":1165,"children":1166},{"class":128,"line":427},[1167],{"type":54,"tag":126,"props":1168,"children":1169},{},[1170],{"type":60,"value":779},{"type":54,"tag":126,"props":1172,"children":1173},{"class":128,"line":436},[1174],{"type":54,"tag":126,"props":1175,"children":1176},{},[1177],{"type":60,"value":1178},"    \"allow-internal-network\",\n",{"type":54,"tag":126,"props":1180,"children":1181},{"class":128,"line":445},[1182],{"type":54,"tag":126,"props":1183,"children":1184},{},[1185],{"type":60,"value":1186},"    firewallData);\n",{"type":54,"tag":126,"props":1188,"children":1189},{"class":128,"line":454},[1190],{"type":54,"tag":126,"props":1191,"children":1192},{"emptyLinePlaceholder":395},[1193],{"type":60,"value":398},{"type":54,"tag":126,"props":1195,"children":1196},{"class":128,"line":463},[1197],{"type":54,"tag":126,"props":1198,"children":1199},{},[1200],{"type":60,"value":1201},"\u002F\u002F List all firewall rules\n",{"type":54,"tag":126,"props":1203,"children":1204},{"class":128,"line":472},[1205],{"type":54,"tag":126,"props":1206,"children":1207},{},[1208],{"type":60,"value":1209},"await foreach (var rule in firewallCollection.GetAllAsync())\n",{"type":54,"tag":126,"props":1211,"children":1212},{"class":128,"line":480},[1213],{"type":54,"tag":126,"props":1214,"children":1215},{},[1216],{"type":60,"value":642},{"type":54,"tag":126,"props":1218,"children":1219},{"class":128,"line":489},[1220],{"type":54,"tag":126,"props":1221,"children":1222},{},[1223],{"type":60,"value":1224},"    Console.WriteLine($\"Rule: {rule.Data.Name} ({rule.Data.StartIP} - {rule.Data.EndIP})\");\n",{"type":54,"tag":126,"props":1226,"children":1227},{"class":128,"line":498},[1228],{"type":54,"tag":126,"props":1229,"children":1230},{},[1231],{"type":60,"value":1232},"}\n",{"type":54,"tag":126,"props":1234,"children":1235},{"class":128,"line":507},[1236],{"type":54,"tag":126,"props":1237,"children":1238},{"emptyLinePlaceholder":395},[1239],{"type":60,"value":398},{"type":54,"tag":126,"props":1241,"children":1242},{"class":128,"line":685},[1243],{"type":54,"tag":126,"props":1244,"children":1245},{},[1246],{"type":60,"value":1247},"\u002F\u002F Delete firewall rule\n",{"type":54,"tag":126,"props":1249,"children":1250},{"class":128,"line":694},[1251],{"type":54,"tag":126,"props":1252,"children":1253},{},[1254],{"type":60,"value":1255},"var ruleToDelete = await firewallCollection.GetAsync(\"allow-internal-network\");\n",{"type":54,"tag":126,"props":1257,"children":1258},{"class":128,"line":703},[1259],{"type":54,"tag":126,"props":1260,"children":1261},{},[1262],{"type":60,"value":1263},"await ruleToDelete.Value.DeleteAsync(WaitUntil.Completed);\n",{"type":54,"tag":537,"props":1265,"children":1267},{"id":1266},"_8-configure-patch-schedule-premium-sku",[1268],{"type":60,"value":1269},"8. Configure Patch Schedule (Premium SKU)",{"type":54,"tag":114,"props":1271,"children":1273},{"className":359,"code":1272,"language":361,"meta":119,"style":119},"\u002F\u002F Patch schedules require Premium SKU\nvar scheduleData = new RedisPatchScheduleData(\n    new[]\n    {\n        new RedisPatchScheduleSetting(RedisDayOfWeek.Saturday, 2) \u002F\u002F 2 AM Saturday\n        {\n            MaintenanceWindow = TimeSpan.FromHours(5)\n        },\n        new RedisPatchScheduleSetting(RedisDayOfWeek.Sunday, 2) \u002F\u002F 2 AM Sunday\n        {\n            MaintenanceWindow = TimeSpan.FromHours(5)\n        }\n    });\n\nvar scheduleCollection = cache.Value.GetRedisPatchSchedules();\nawait scheduleCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    RedisPatchScheduleDefaultName.Default,\n    scheduleData);\n",[1274],{"type":54,"tag":122,"props":1275,"children":1276},{"__ignoreMap":119},[1277,1285,1293,1301,1308,1316,1324,1332,1340,1348,1355,1362,1370,1378,1385,1393,1401,1408,1416],{"type":54,"tag":126,"props":1278,"children":1279},{"class":128,"line":129},[1280],{"type":54,"tag":126,"props":1281,"children":1282},{},[1283],{"type":60,"value":1284},"\u002F\u002F Patch schedules require Premium SKU\n",{"type":54,"tag":126,"props":1286,"children":1287},{"class":128,"line":155},[1288],{"type":54,"tag":126,"props":1289,"children":1290},{},[1291],{"type":60,"value":1292},"var scheduleData = new RedisPatchScheduleData(\n",{"type":54,"tag":126,"props":1294,"children":1295},{"class":128,"line":274},[1296],{"type":54,"tag":126,"props":1297,"children":1298},{},[1299],{"type":60,"value":1300},"    new[]\n",{"type":54,"tag":126,"props":1302,"children":1303},{"class":128,"line":301},[1304],{"type":54,"tag":126,"props":1305,"children":1306},{},[1307],{"type":60,"value":674},{"type":54,"tag":126,"props":1309,"children":1310},{"class":128,"line":327},[1311],{"type":54,"tag":126,"props":1312,"children":1313},{},[1314],{"type":60,"value":1315},"        new RedisPatchScheduleSetting(RedisDayOfWeek.Saturday, 2) \u002F\u002F 2 AM Saturday\n",{"type":54,"tag":126,"props":1317,"children":1318},{"class":128,"line":409},[1319],{"type":54,"tag":126,"props":1320,"children":1321},{},[1322],{"type":60,"value":1323},"        {\n",{"type":54,"tag":126,"props":1325,"children":1326},{"class":128,"line":418},[1327],{"type":54,"tag":126,"props":1328,"children":1329},{},[1330],{"type":60,"value":1331},"            MaintenanceWindow = TimeSpan.FromHours(5)\n",{"type":54,"tag":126,"props":1333,"children":1334},{"class":128,"line":427},[1335],{"type":54,"tag":126,"props":1336,"children":1337},{},[1338],{"type":60,"value":1339},"        },\n",{"type":54,"tag":126,"props":1341,"children":1342},{"class":128,"line":436},[1343],{"type":54,"tag":126,"props":1344,"children":1345},{},[1346],{"type":60,"value":1347},"        new RedisPatchScheduleSetting(RedisDayOfWeek.Sunday, 2) \u002F\u002F 2 AM Sunday\n",{"type":54,"tag":126,"props":1349,"children":1350},{"class":128,"line":445},[1351],{"type":54,"tag":126,"props":1352,"children":1353},{},[1354],{"type":60,"value":1323},{"type":54,"tag":126,"props":1356,"children":1357},{"class":128,"line":454},[1358],{"type":54,"tag":126,"props":1359,"children":1360},{},[1361],{"type":60,"value":1331},{"type":54,"tag":126,"props":1363,"children":1364},{"class":128,"line":463},[1365],{"type":54,"tag":126,"props":1366,"children":1367},{},[1368],{"type":60,"value":1369},"        }\n",{"type":54,"tag":126,"props":1371,"children":1372},{"class":128,"line":472},[1373],{"type":54,"tag":126,"props":1374,"children":1375},{},[1376],{"type":60,"value":1377},"    });\n",{"type":54,"tag":126,"props":1379,"children":1380},{"class":128,"line":480},[1381],{"type":54,"tag":126,"props":1382,"children":1383},{"emptyLinePlaceholder":395},[1384],{"type":60,"value":398},{"type":54,"tag":126,"props":1386,"children":1387},{"class":128,"line":489},[1388],{"type":54,"tag":126,"props":1389,"children":1390},{},[1391],{"type":60,"value":1392},"var scheduleCollection = cache.Value.GetRedisPatchSchedules();\n",{"type":54,"tag":126,"props":1394,"children":1395},{"class":128,"line":498},[1396],{"type":54,"tag":126,"props":1397,"children":1398},{},[1399],{"type":60,"value":1400},"await scheduleCollection.CreateOrUpdateAsync(\n",{"type":54,"tag":126,"props":1402,"children":1403},{"class":128,"line":507},[1404],{"type":54,"tag":126,"props":1405,"children":1406},{},[1407],{"type":60,"value":779},{"type":54,"tag":126,"props":1409,"children":1410},{"class":128,"line":685},[1411],{"type":54,"tag":126,"props":1412,"children":1413},{},[1414],{"type":60,"value":1415},"    RedisPatchScheduleDefaultName.Default,\n",{"type":54,"tag":126,"props":1417,"children":1418},{"class":128,"line":694},[1419],{"type":54,"tag":126,"props":1420,"children":1421},{},[1422],{"type":60,"value":1423},"    scheduleData);\n",{"type":54,"tag":537,"props":1425,"children":1427},{"id":1426},"_9-importexport-data-premium-sku",[1428],{"type":60,"value":1429},"9. Import\u002FExport Data (Premium SKU)",{"type":54,"tag":114,"props":1431,"children":1433},{"className":359,"code":1432,"language":361,"meta":119,"style":119},"\u002F\u002F Import data from blob storage\nvar importContent = new ImportRdbContent(\n    files: new[] { \"https:\u002F\u002Fmystorageaccount.blob.core.windows.net\u002Fcontainer\u002Fdump.rdb\" },\n    format: \"RDB\");\n\nawait cache.Value.ImportDataAsync(WaitUntil.Completed, importContent);\n\n\u002F\u002F Export data to blob storage\nvar exportContent = new ExportRdbContent(\n    prefix: \"backup\",\n    container: \"https:\u002F\u002Fmystorageaccount.blob.core.windows.net\u002Fcontainer?sastoken\",\n    format: \"RDB\");\n\nawait cache.Value.ExportDataAsync(WaitUntil.Completed, exportContent);\n",[1434],{"type":54,"tag":122,"props":1435,"children":1436},{"__ignoreMap":119},[1437,1445,1453,1461,1469,1476,1484,1491,1499,1507,1515,1523,1530,1537],{"type":54,"tag":126,"props":1438,"children":1439},{"class":128,"line":129},[1440],{"type":54,"tag":126,"props":1441,"children":1442},{},[1443],{"type":60,"value":1444},"\u002F\u002F Import data from blob storage\n",{"type":54,"tag":126,"props":1446,"children":1447},{"class":128,"line":155},[1448],{"type":54,"tag":126,"props":1449,"children":1450},{},[1451],{"type":60,"value":1452},"var importContent = new ImportRdbContent(\n",{"type":54,"tag":126,"props":1454,"children":1455},{"class":128,"line":274},[1456],{"type":54,"tag":126,"props":1457,"children":1458},{},[1459],{"type":60,"value":1460},"    files: new[] { \"https:\u002F\u002Fmystorageaccount.blob.core.windows.net\u002Fcontainer\u002Fdump.rdb\" },\n",{"type":54,"tag":126,"props":1462,"children":1463},{"class":128,"line":301},[1464],{"type":54,"tag":126,"props":1465,"children":1466},{},[1467],{"type":60,"value":1468},"    format: \"RDB\");\n",{"type":54,"tag":126,"props":1470,"children":1471},{"class":128,"line":327},[1472],{"type":54,"tag":126,"props":1473,"children":1474},{"emptyLinePlaceholder":395},[1475],{"type":60,"value":398},{"type":54,"tag":126,"props":1477,"children":1478},{"class":128,"line":409},[1479],{"type":54,"tag":126,"props":1480,"children":1481},{},[1482],{"type":60,"value":1483},"await cache.Value.ImportDataAsync(WaitUntil.Completed, importContent);\n",{"type":54,"tag":126,"props":1485,"children":1486},{"class":128,"line":418},[1487],{"type":54,"tag":126,"props":1488,"children":1489},{"emptyLinePlaceholder":395},[1490],{"type":60,"value":398},{"type":54,"tag":126,"props":1492,"children":1493},{"class":128,"line":427},[1494],{"type":54,"tag":126,"props":1495,"children":1496},{},[1497],{"type":60,"value":1498},"\u002F\u002F Export data to blob storage\n",{"type":54,"tag":126,"props":1500,"children":1501},{"class":128,"line":436},[1502],{"type":54,"tag":126,"props":1503,"children":1504},{},[1505],{"type":60,"value":1506},"var exportContent = new ExportRdbContent(\n",{"type":54,"tag":126,"props":1508,"children":1509},{"class":128,"line":445},[1510],{"type":54,"tag":126,"props":1511,"children":1512},{},[1513],{"type":60,"value":1514},"    prefix: \"backup\",\n",{"type":54,"tag":126,"props":1516,"children":1517},{"class":128,"line":454},[1518],{"type":54,"tag":126,"props":1519,"children":1520},{},[1521],{"type":60,"value":1522},"    container: \"https:\u002F\u002Fmystorageaccount.blob.core.windows.net\u002Fcontainer?sastoken\",\n",{"type":54,"tag":126,"props":1524,"children":1525},{"class":128,"line":463},[1526],{"type":54,"tag":126,"props":1527,"children":1528},{},[1529],{"type":60,"value":1468},{"type":54,"tag":126,"props":1531,"children":1532},{"class":128,"line":472},[1533],{"type":54,"tag":126,"props":1534,"children":1535},{"emptyLinePlaceholder":395},[1536],{"type":60,"value":398},{"type":54,"tag":126,"props":1538,"children":1539},{"class":128,"line":480},[1540],{"type":54,"tag":126,"props":1541,"children":1542},{},[1543],{"type":60,"value":1544},"await cache.Value.ExportDataAsync(WaitUntil.Completed, exportContent);\n",{"type":54,"tag":537,"props":1546,"children":1548},{"id":1547},"_10-force-reboot",[1549],{"type":60,"value":1550},"10. Force Reboot",{"type":54,"tag":114,"props":1552,"children":1554},{"className":359,"code":1553,"language":361,"meta":119,"style":119},"var rebootContent = new RedisRebootContent\n{\n    RebootType = RedisRebootType.AllNodes,\n    ShardId = 0 \u002F\u002F For clustered caches\n};\n\nawait cache.Value.ForceRebootAsync(rebootContent);\n",[1555],{"type":54,"tag":122,"props":1556,"children":1557},{"__ignoreMap":119},[1558,1566,1573,1581,1589,1596,1603],{"type":54,"tag":126,"props":1559,"children":1560},{"class":128,"line":129},[1561],{"type":54,"tag":126,"props":1562,"children":1563},{},[1564],{"type":60,"value":1565},"var rebootContent = new RedisRebootContent\n",{"type":54,"tag":126,"props":1567,"children":1568},{"class":128,"line":155},[1569],{"type":54,"tag":126,"props":1570,"children":1571},{},[1572],{"type":60,"value":642},{"type":54,"tag":126,"props":1574,"children":1575},{"class":128,"line":274},[1576],{"type":54,"tag":126,"props":1577,"children":1578},{},[1579],{"type":60,"value":1580},"    RebootType = RedisRebootType.AllNodes,\n",{"type":54,"tag":126,"props":1582,"children":1583},{"class":128,"line":301},[1584],{"type":54,"tag":126,"props":1585,"children":1586},{},[1587],{"type":60,"value":1588},"    ShardId = 0 \u002F\u002F For clustered caches\n",{"type":54,"tag":126,"props":1590,"children":1591},{"class":128,"line":327},[1592],{"type":54,"tag":126,"props":1593,"children":1594},{},[1595],{"type":60,"value":735},{"type":54,"tag":126,"props":1597,"children":1598},{"class":128,"line":409},[1599],{"type":54,"tag":126,"props":1600,"children":1601},{"emptyLinePlaceholder":395},[1602],{"type":60,"value":398},{"type":54,"tag":126,"props":1604,"children":1605},{"class":128,"line":418},[1606],{"type":54,"tag":126,"props":1607,"children":1608},{},[1609],{"type":60,"value":1610},"await cache.Value.ForceRebootAsync(rebootContent);\n",{"type":54,"tag":107,"props":1612,"children":1614},{"id":1613},"sku-reference",[1615],{"type":60,"value":1616},"SKU Reference",{"type":54,"tag":1618,"props":1619,"children":1620},"table",{},[1621,1650],{"type":54,"tag":1622,"props":1623,"children":1624},"thead",{},[1625],{"type":54,"tag":1626,"props":1627,"children":1628},"tr",{},[1629,1635,1640,1645],{"type":54,"tag":1630,"props":1631,"children":1632},"th",{},[1633],{"type":60,"value":1634},"SKU",{"type":54,"tag":1630,"props":1636,"children":1637},{},[1638],{"type":60,"value":1639},"Family",{"type":54,"tag":1630,"props":1641,"children":1642},{},[1643],{"type":60,"value":1644},"Capacity",{"type":54,"tag":1630,"props":1646,"children":1647},{},[1648],{"type":60,"value":1649},"Features",{"type":54,"tag":1651,"props":1652,"children":1653},"tbody",{},[1654,1678,1699],{"type":54,"tag":1626,"props":1655,"children":1656},{},[1657,1663,1668,1673],{"type":54,"tag":1658,"props":1659,"children":1660},"td",{},[1661],{"type":60,"value":1662},"Basic",{"type":54,"tag":1658,"props":1664,"children":1665},{},[1666],{"type":60,"value":1667},"C",{"type":54,"tag":1658,"props":1669,"children":1670},{},[1671],{"type":60,"value":1672},"0-6",{"type":54,"tag":1658,"props":1674,"children":1675},{},[1676],{"type":60,"value":1677},"Single node, no SLA, dev\u002Ftest only",{"type":54,"tag":1626,"props":1679,"children":1680},{},[1681,1686,1690,1694],{"type":54,"tag":1658,"props":1682,"children":1683},{},[1684],{"type":60,"value":1685},"Standard",{"type":54,"tag":1658,"props":1687,"children":1688},{},[1689],{"type":60,"value":1667},{"type":54,"tag":1658,"props":1691,"children":1692},{},[1693],{"type":60,"value":1672},{"type":54,"tag":1658,"props":1695,"children":1696},{},[1697],{"type":60,"value":1698},"Two nodes (primary\u002Freplica), SLA",{"type":54,"tag":1626,"props":1700,"children":1701},{},[1702,1707,1712,1717],{"type":54,"tag":1658,"props":1703,"children":1704},{},[1705],{"type":60,"value":1706},"Premium",{"type":54,"tag":1658,"props":1708,"children":1709},{},[1710],{"type":60,"value":1711},"P",{"type":54,"tag":1658,"props":1713,"children":1714},{},[1715],{"type":60,"value":1716},"1-5",{"type":54,"tag":1658,"props":1718,"children":1719},{},[1720],{"type":60,"value":1721},"Clustering, geo-replication, VNet, persistence",{"type":54,"tag":63,"props":1723,"children":1724},{},[1725,1730],{"type":54,"tag":76,"props":1726,"children":1727},{},[1728],{"type":60,"value":1729},"Capacity Sizes (Family C - Basic\u002FStandard)",{"type":60,"value":1731},":",{"type":54,"tag":82,"props":1733,"children":1734},{},[1735,1740,1745,1750,1755,1760,1765],{"type":54,"tag":86,"props":1736,"children":1737},{},[1738],{"type":60,"value":1739},"C0: 250 MB",{"type":54,"tag":86,"props":1741,"children":1742},{},[1743],{"type":60,"value":1744},"C1: 1 GB",{"type":54,"tag":86,"props":1746,"children":1747},{},[1748],{"type":60,"value":1749},"C2: 2.5 GB",{"type":54,"tag":86,"props":1751,"children":1752},{},[1753],{"type":60,"value":1754},"C3: 6 GB",{"type":54,"tag":86,"props":1756,"children":1757},{},[1758],{"type":60,"value":1759},"C4: 13 GB",{"type":54,"tag":86,"props":1761,"children":1762},{},[1763],{"type":60,"value":1764},"C5: 26 GB",{"type":54,"tag":86,"props":1766,"children":1767},{},[1768],{"type":60,"value":1769},"C6: 53 GB",{"type":54,"tag":63,"props":1771,"children":1772},{},[1773,1778],{"type":54,"tag":76,"props":1774,"children":1775},{},[1776],{"type":60,"value":1777},"Capacity Sizes (Family P - Premium)",{"type":60,"value":1731},{"type":54,"tag":82,"props":1780,"children":1781},{},[1782,1787,1792,1797,1802],{"type":54,"tag":86,"props":1783,"children":1784},{},[1785],{"type":60,"value":1786},"P1: 6 GB per shard",{"type":54,"tag":86,"props":1788,"children":1789},{},[1790],{"type":60,"value":1791},"P2: 13 GB per shard",{"type":54,"tag":86,"props":1793,"children":1794},{},[1795],{"type":60,"value":1796},"P3: 26 GB per shard",{"type":54,"tag":86,"props":1798,"children":1799},{},[1800],{"type":60,"value":1801},"P4: 53 GB per shard",{"type":54,"tag":86,"props":1803,"children":1804},{},[1805],{"type":60,"value":1806},"P5: 120 GB per shard",{"type":54,"tag":107,"props":1808,"children":1810},{"id":1809},"key-types-reference",[1811],{"type":60,"value":1812},"Key Types Reference",{"type":54,"tag":1618,"props":1814,"children":1815},{},[1816,1832],{"type":54,"tag":1622,"props":1817,"children":1818},{},[1819],{"type":54,"tag":1626,"props":1820,"children":1821},{},[1822,1827],{"type":54,"tag":1630,"props":1823,"children":1824},{},[1825],{"type":60,"value":1826},"Type",{"type":54,"tag":1630,"props":1828,"children":1829},{},[1830],{"type":60,"value":1831},"Purpose",{"type":54,"tag":1651,"props":1833,"children":1834},{},[1835,1852,1869,1886,1903,1920,1937,1954,1971,1988,2005,2022,2039],{"type":54,"tag":1626,"props":1836,"children":1837},{},[1838,1847],{"type":54,"tag":1658,"props":1839,"children":1840},{},[1841],{"type":54,"tag":122,"props":1842,"children":1844},{"className":1843},[],[1845],{"type":60,"value":1846},"ArmClient",{"type":54,"tag":1658,"props":1848,"children":1849},{},[1850],{"type":60,"value":1851},"Entry point for all ARM operations",{"type":54,"tag":1626,"props":1853,"children":1854},{},[1855,1864],{"type":54,"tag":1658,"props":1856,"children":1857},{},[1858],{"type":54,"tag":122,"props":1859,"children":1861},{"className":1860},[],[1862],{"type":60,"value":1863},"RedisResource",{"type":54,"tag":1658,"props":1865,"children":1866},{},[1867],{"type":60,"value":1868},"Represents a Redis cache instance",{"type":54,"tag":1626,"props":1870,"children":1871},{},[1872,1881],{"type":54,"tag":1658,"props":1873,"children":1874},{},[1875],{"type":54,"tag":122,"props":1876,"children":1878},{"className":1877},[],[1879],{"type":60,"value":1880},"RedisCollection",{"type":54,"tag":1658,"props":1882,"children":1883},{},[1884],{"type":60,"value":1885},"Collection for cache CRUD operations",{"type":54,"tag":1626,"props":1887,"children":1888},{},[1889,1898],{"type":54,"tag":1658,"props":1890,"children":1891},{},[1892],{"type":54,"tag":122,"props":1893,"children":1895},{"className":1894},[],[1896],{"type":60,"value":1897},"RedisFirewallRuleResource",{"type":54,"tag":1658,"props":1899,"children":1900},{},[1901],{"type":60,"value":1902},"Firewall rule for IP filtering",{"type":54,"tag":1626,"props":1904,"children":1905},{},[1906,1915],{"type":54,"tag":1658,"props":1907,"children":1908},{},[1909],{"type":54,"tag":122,"props":1910,"children":1912},{"className":1911},[],[1913],{"type":60,"value":1914},"RedisPatchScheduleResource",{"type":54,"tag":1658,"props":1916,"children":1917},{},[1918],{"type":60,"value":1919},"Maintenance window configuration",{"type":54,"tag":1626,"props":1921,"children":1922},{},[1923,1932],{"type":54,"tag":1658,"props":1924,"children":1925},{},[1926],{"type":54,"tag":122,"props":1927,"children":1929},{"className":1928},[],[1930],{"type":60,"value":1931},"RedisLinkedServerWithPropertyResource",{"type":54,"tag":1658,"props":1933,"children":1934},{},[1935],{"type":60,"value":1936},"Geo-replication linked server",{"type":54,"tag":1626,"props":1938,"children":1939},{},[1940,1949],{"type":54,"tag":1658,"props":1941,"children":1942},{},[1943],{"type":54,"tag":122,"props":1944,"children":1946},{"className":1945},[],[1947],{"type":60,"value":1948},"RedisPrivateEndpointConnectionResource",{"type":54,"tag":1658,"props":1950,"children":1951},{},[1952],{"type":60,"value":1953},"Private endpoint connection",{"type":54,"tag":1626,"props":1955,"children":1956},{},[1957,1966],{"type":54,"tag":1658,"props":1958,"children":1959},{},[1960],{"type":54,"tag":122,"props":1961,"children":1963},{"className":1962},[],[1964],{"type":60,"value":1965},"RedisCacheAccessPolicyResource",{"type":54,"tag":1658,"props":1967,"children":1968},{},[1969],{"type":60,"value":1970},"RBAC access policy",{"type":54,"tag":1626,"props":1972,"children":1973},{},[1974,1983],{"type":54,"tag":1658,"props":1975,"children":1976},{},[1977],{"type":54,"tag":122,"props":1978,"children":1980},{"className":1979},[],[1981],{"type":60,"value":1982},"RedisCreateOrUpdateContent",{"type":54,"tag":1658,"props":1984,"children":1985},{},[1986],{"type":60,"value":1987},"Cache creation payload",{"type":54,"tag":1626,"props":1989,"children":1990},{},[1991,2000],{"type":54,"tag":1658,"props":1992,"children":1993},{},[1994],{"type":54,"tag":122,"props":1995,"children":1997},{"className":1996},[],[1998],{"type":60,"value":1999},"RedisPatch",{"type":54,"tag":1658,"props":2001,"children":2002},{},[2003],{"type":60,"value":2004},"Cache update payload",{"type":54,"tag":1626,"props":2006,"children":2007},{},[2008,2017],{"type":54,"tag":1658,"props":2009,"children":2010},{},[2011],{"type":54,"tag":122,"props":2012,"children":2014},{"className":2013},[],[2015],{"type":60,"value":2016},"RedisSku",{"type":54,"tag":1658,"props":2018,"children":2019},{},[2020],{"type":60,"value":2021},"SKU configuration (name, family, capacity)",{"type":54,"tag":1626,"props":2023,"children":2024},{},[2025,2034],{"type":54,"tag":1658,"props":2026,"children":2027},{},[2028],{"type":54,"tag":122,"props":2029,"children":2031},{"className":2030},[],[2032],{"type":60,"value":2033},"RedisAccessKeys",{"type":54,"tag":1658,"props":2035,"children":2036},{},[2037],{"type":60,"value":2038},"Primary and secondary access keys",{"type":54,"tag":1626,"props":2040,"children":2041},{},[2042,2051],{"type":54,"tag":1658,"props":2043,"children":2044},{},[2045],{"type":54,"tag":122,"props":2046,"children":2048},{"className":2047},[],[2049],{"type":60,"value":2050},"RedisRegenerateKeyContent",{"type":54,"tag":1658,"props":2052,"children":2053},{},[2054],{"type":60,"value":2055},"Key regeneration request",{"type":54,"tag":107,"props":2057,"children":2059},{"id":2058},"best-practices",[2060],{"type":60,"value":2061},"Best Practices",{"type":54,"tag":2063,"props":2064,"children":2065},"ol",{},[2066,2082,2097,2113,2129,2144,2170,2180,2196,2213],{"type":54,"tag":86,"props":2067,"children":2068},{},[2069,2080],{"type":54,"tag":76,"props":2070,"children":2071},{},[2072,2074],{"type":60,"value":2073},"Use ",{"type":54,"tag":122,"props":2075,"children":2077},{"className":2076},[],[2078],{"type":60,"value":2079},"WaitUntil.Completed",{"type":60,"value":2081}," for operations that must finish before proceeding",{"type":54,"tag":86,"props":2083,"children":2084},{},[2085,2095],{"type":54,"tag":76,"props":2086,"children":2087},{},[2088,2089],{"type":60,"value":2073},{"type":54,"tag":122,"props":2090,"children":2092},{"className":2091},[],[2093],{"type":60,"value":2094},"WaitUntil.Started",{"type":60,"value":2096}," when you want to poll manually or run operations in parallel",{"type":54,"tag":86,"props":2098,"children":2099},{},[2100,2111],{"type":54,"tag":76,"props":2101,"children":2102},{},[2103,2105],{"type":60,"value":2104},"Always use ",{"type":54,"tag":122,"props":2106,"children":2108},{"className":2107},[],[2109],{"type":60,"value":2110},"DefaultAzureCredential",{"type":60,"value":2112}," — never hardcode keys",{"type":54,"tag":86,"props":2114,"children":2115},{},[2116,2127],{"type":54,"tag":76,"props":2117,"children":2118},{},[2119,2121],{"type":60,"value":2120},"Handle ",{"type":54,"tag":122,"props":2122,"children":2124},{"className":2123},[],[2125],{"type":60,"value":2126},"RequestFailedException",{"type":60,"value":2128}," for ARM API errors",{"type":54,"tag":86,"props":2130,"children":2131},{},[2132,2142],{"type":54,"tag":76,"props":2133,"children":2134},{},[2135,2136],{"type":60,"value":2073},{"type":54,"tag":122,"props":2137,"children":2139},{"className":2138},[],[2140],{"type":60,"value":2141},"CreateOrUpdateAsync",{"type":60,"value":2143}," for idempotent operations",{"type":54,"tag":86,"props":2145,"children":2146},{},[2147,2152,2154,2160,2162,2168],{"type":54,"tag":76,"props":2148,"children":2149},{},[2150],{"type":60,"value":2151},"Navigate hierarchy",{"type":60,"value":2153}," via ",{"type":54,"tag":122,"props":2155,"children":2157},{"className":2156},[],[2158],{"type":60,"value":2159},"Get*",{"type":60,"value":2161}," methods (e.g., ",{"type":54,"tag":122,"props":2163,"children":2165},{"className":2164},[],[2166],{"type":60,"value":2167},"cache.GetRedisFirewallRules()",{"type":60,"value":2169},")",{"type":54,"tag":86,"props":2171,"children":2172},{},[2173,2178],{"type":54,"tag":76,"props":2174,"children":2175},{},[2176],{"type":60,"value":2177},"Use Premium SKU",{"type":60,"value":2179}," for production workloads requiring geo-replication, clustering, or persistence",{"type":54,"tag":86,"props":2181,"children":2182},{},[2183,2188,2190],{"type":54,"tag":76,"props":2184,"children":2185},{},[2186],{"type":60,"value":2187},"Enable TLS 1.2 minimum",{"type":60,"value":2189}," — set ",{"type":54,"tag":122,"props":2191,"children":2193},{"className":2192},[],[2194],{"type":60,"value":2195},"MinimumTlsVersion = RedisTlsVersion.Tls1_2",{"type":54,"tag":86,"props":2197,"children":2198},{},[2199,2204,2205,2211],{"type":54,"tag":76,"props":2200,"children":2201},{},[2202],{"type":60,"value":2203},"Disable non-SSL port",{"type":60,"value":2189},{"type":54,"tag":122,"props":2206,"children":2208},{"className":2207},[],[2209],{"type":60,"value":2210},"EnableNonSslPort = false",{"type":60,"value":2212}," for security",{"type":54,"tag":86,"props":2214,"children":2215},{},[2216,2221,2223,2229],{"type":54,"tag":76,"props":2217,"children":2218},{},[2219],{"type":60,"value":2220},"Rotate keys regularly",{"type":60,"value":2222}," — use ",{"type":54,"tag":122,"props":2224,"children":2226},{"className":2225},[],[2227],{"type":60,"value":2228},"RegenerateKeyAsync",{"type":60,"value":2230}," and update connection strings",{"type":54,"tag":107,"props":2232,"children":2234},{"id":2233},"error-handling",[2235],{"type":60,"value":2236},"Error Handling",{"type":54,"tag":114,"props":2238,"children":2240},{"className":359,"code":2239,"language":361,"meta":119,"style":119},"using Azure;\n\ntry\n{\n    var operation = await cacheCollection.CreateOrUpdateAsync(\n        WaitUntil.Completed, cacheName, cacheData);\n}\ncatch (RequestFailedException ex) when (ex.Status == 409)\n{\n    Console.WriteLine(\"Cache already exists\");\n}\ncatch (RequestFailedException ex) when (ex.Status == 400)\n{\n    Console.WriteLine($\"Invalid configuration: {ex.Message}\");\n}\ncatch (RequestFailedException ex)\n{\n    Console.WriteLine($\"ARM Error: {ex.Status} - {ex.ErrorCode}: {ex.Message}\");\n}\n",[2241],{"type":54,"tag":122,"props":2242,"children":2243},{"__ignoreMap":119},[2244,2252,2259,2267,2274,2282,2290,2297,2305,2312,2320,2327,2335,2342,2350,2357,2365,2372,2380],{"type":54,"tag":126,"props":2245,"children":2246},{"class":128,"line":129},[2247],{"type":54,"tag":126,"props":2248,"children":2249},{},[2250],{"type":60,"value":2251},"using Azure;\n",{"type":54,"tag":126,"props":2253,"children":2254},{"class":128,"line":155},[2255],{"type":54,"tag":126,"props":2256,"children":2257},{"emptyLinePlaceholder":395},[2258],{"type":60,"value":398},{"type":54,"tag":126,"props":2260,"children":2261},{"class":128,"line":274},[2262],{"type":54,"tag":126,"props":2263,"children":2264},{},[2265],{"type":60,"value":2266},"try\n",{"type":54,"tag":126,"props":2268,"children":2269},{"class":128,"line":301},[2270],{"type":54,"tag":126,"props":2271,"children":2272},{},[2273],{"type":60,"value":642},{"type":54,"tag":126,"props":2275,"children":2276},{"class":128,"line":327},[2277],{"type":54,"tag":126,"props":2278,"children":2279},{},[2280],{"type":60,"value":2281},"    var operation = await cacheCollection.CreateOrUpdateAsync(\n",{"type":54,"tag":126,"props":2283,"children":2284},{"class":128,"line":409},[2285],{"type":54,"tag":126,"props":2286,"children":2287},{},[2288],{"type":60,"value":2289},"        WaitUntil.Completed, cacheName, cacheData);\n",{"type":54,"tag":126,"props":2291,"children":2292},{"class":128,"line":418},[2293],{"type":54,"tag":126,"props":2294,"children":2295},{},[2296],{"type":60,"value":1232},{"type":54,"tag":126,"props":2298,"children":2299},{"class":128,"line":427},[2300],{"type":54,"tag":126,"props":2301,"children":2302},{},[2303],{"type":60,"value":2304},"catch (RequestFailedException ex) when (ex.Status == 409)\n",{"type":54,"tag":126,"props":2306,"children":2307},{"class":128,"line":436},[2308],{"type":54,"tag":126,"props":2309,"children":2310},{},[2311],{"type":60,"value":642},{"type":54,"tag":126,"props":2313,"children":2314},{"class":128,"line":445},[2315],{"type":54,"tag":126,"props":2316,"children":2317},{},[2318],{"type":60,"value":2319},"    Console.WriteLine(\"Cache already exists\");\n",{"type":54,"tag":126,"props":2321,"children":2322},{"class":128,"line":454},[2323],{"type":54,"tag":126,"props":2324,"children":2325},{},[2326],{"type":60,"value":1232},{"type":54,"tag":126,"props":2328,"children":2329},{"class":128,"line":463},[2330],{"type":54,"tag":126,"props":2331,"children":2332},{},[2333],{"type":60,"value":2334},"catch (RequestFailedException ex) when (ex.Status == 400)\n",{"type":54,"tag":126,"props":2336,"children":2337},{"class":128,"line":472},[2338],{"type":54,"tag":126,"props":2339,"children":2340},{},[2341],{"type":60,"value":642},{"type":54,"tag":126,"props":2343,"children":2344},{"class":128,"line":480},[2345],{"type":54,"tag":126,"props":2346,"children":2347},{},[2348],{"type":60,"value":2349},"    Console.WriteLine($\"Invalid configuration: {ex.Message}\");\n",{"type":54,"tag":126,"props":2351,"children":2352},{"class":128,"line":489},[2353],{"type":54,"tag":126,"props":2354,"children":2355},{},[2356],{"type":60,"value":1232},{"type":54,"tag":126,"props":2358,"children":2359},{"class":128,"line":498},[2360],{"type":54,"tag":126,"props":2361,"children":2362},{},[2363],{"type":60,"value":2364},"catch (RequestFailedException ex)\n",{"type":54,"tag":126,"props":2366,"children":2367},{"class":128,"line":507},[2368],{"type":54,"tag":126,"props":2369,"children":2370},{},[2371],{"type":60,"value":642},{"type":54,"tag":126,"props":2373,"children":2374},{"class":128,"line":685},[2375],{"type":54,"tag":126,"props":2376,"children":2377},{},[2378],{"type":60,"value":2379},"    Console.WriteLine($\"ARM Error: {ex.Status} - {ex.ErrorCode}: {ex.Message}\");\n",{"type":54,"tag":126,"props":2381,"children":2382},{"class":128,"line":694},[2383],{"type":54,"tag":126,"props":2384,"children":2385},{},[2386],{"type":60,"value":1232},{"type":54,"tag":107,"props":2388,"children":2390},{"id":2389},"common-pitfalls",[2391],{"type":60,"value":2392},"Common Pitfalls",{"type":54,"tag":2063,"props":2394,"children":2395},{},[2396,2406,2416,2426,2436,2446,2456],{"type":54,"tag":86,"props":2397,"children":2398},{},[2399,2404],{"type":54,"tag":76,"props":2400,"children":2401},{},[2402],{"type":60,"value":2403},"SKU downgrades not allowed",{"type":60,"value":2405}," — You cannot downgrade from Premium to Standard\u002FBasic",{"type":54,"tag":86,"props":2407,"children":2408},{},[2409,2414],{"type":54,"tag":76,"props":2410,"children":2411},{},[2412],{"type":60,"value":2413},"Clustering requires Premium",{"type":60,"value":2415}," — Shard configuration only available on Premium SKU",{"type":54,"tag":86,"props":2417,"children":2418},{},[2419,2424],{"type":54,"tag":76,"props":2420,"children":2421},{},[2422],{"type":60,"value":2423},"Geo-replication requires Premium",{"type":60,"value":2425}," — Linked servers only work with Premium caches",{"type":54,"tag":86,"props":2427,"children":2428},{},[2429,2434],{"type":54,"tag":76,"props":2430,"children":2431},{},[2432],{"type":60,"value":2433},"VNet injection requires Premium",{"type":60,"value":2435}," — Virtual network support is Premium-only",{"type":54,"tag":86,"props":2437,"children":2438},{},[2439,2444],{"type":54,"tag":76,"props":2440,"children":2441},{},[2442],{"type":60,"value":2443},"Patch schedules require Premium",{"type":60,"value":2445}," — Maintenance windows only configurable on Premium",{"type":54,"tag":86,"props":2447,"children":2448},{},[2449,2454],{"type":54,"tag":76,"props":2450,"children":2451},{},[2452],{"type":60,"value":2453},"Cache name globally unique",{"type":60,"value":2455}," — Redis cache names must be unique across all Azure subscriptions",{"type":54,"tag":86,"props":2457,"children":2458},{},[2459,2464,2466,2471],{"type":54,"tag":76,"props":2460,"children":2461},{},[2462],{"type":60,"value":2463},"Long provisioning times",{"type":60,"value":2465}," — Cache creation can take 15-20 minutes; use ",{"type":54,"tag":122,"props":2467,"children":2469},{"className":2468},[],[2470],{"type":60,"value":2094},{"type":60,"value":2472}," for async patterns",{"type":54,"tag":107,"props":2474,"children":2476},{"id":2475},"connecting-with-stackexchangeredis-data-plane",[2477],{"type":60,"value":2478},"Connecting with StackExchange.Redis (Data Plane)",{"type":54,"tag":63,"props":2480,"children":2481},{},[2482],{"type":60,"value":2483},"After creating the cache with this management SDK, use StackExchange.Redis for data operations:",{"type":54,"tag":114,"props":2485,"children":2487},{"className":359,"code":2486,"language":361,"meta":119,"style":119},"using StackExchange.Redis;\n\n\u002F\u002F Get connection info from management SDK\nvar cache = await resourceGroup.Value.GetRedisAsync(\"my-redis-cache\");\nvar keys = await cache.Value.GetKeysAsync();\n\n\u002F\u002F Connect with StackExchange.Redis\nvar connectionString = $\"{cache.Value.Data.HostName}:{cache.Value.Data.SslPort},password={keys.Value.PrimaryKey},ssl=True,abortConnect=False\";\nvar connection = ConnectionMultiplexer.Connect(connectionString);\nvar db = connection.GetDatabase();\n\n\u002F\u002F Data operations\nawait db.StringSetAsync(\"key\", \"value\");\nvar value = await db.StringGetAsync(\"key\");\n",[2488],{"type":54,"tag":122,"props":2489,"children":2490},{"__ignoreMap":119},[2491,2499,2506,2514,2522,2529,2536,2544,2552,2560,2568,2575,2583,2591],{"type":54,"tag":126,"props":2492,"children":2493},{"class":128,"line":129},[2494],{"type":54,"tag":126,"props":2495,"children":2496},{},[2497],{"type":60,"value":2498},"using StackExchange.Redis;\n",{"type":54,"tag":126,"props":2500,"children":2501},{"class":128,"line":155},[2502],{"type":54,"tag":126,"props":2503,"children":2504},{"emptyLinePlaceholder":395},[2505],{"type":60,"value":398},{"type":54,"tag":126,"props":2507,"children":2508},{"class":128,"line":274},[2509],{"type":54,"tag":126,"props":2510,"children":2511},{},[2512],{"type":60,"value":2513},"\u002F\u002F Get connection info from management SDK\n",{"type":54,"tag":126,"props":2515,"children":2516},{"class":128,"line":301},[2517],{"type":54,"tag":126,"props":2518,"children":2519},{},[2520],{"type":60,"value":2521},"var cache = await resourceGroup.Value.GetRedisAsync(\"my-redis-cache\");\n",{"type":54,"tag":126,"props":2523,"children":2524},{"class":128,"line":327},[2525],{"type":54,"tag":126,"props":2526,"children":2527},{},[2528],{"type":60,"value":1042},{"type":54,"tag":126,"props":2530,"children":2531},{"class":128,"line":409},[2532],{"type":54,"tag":126,"props":2533,"children":2534},{"emptyLinePlaceholder":395},[2535],{"type":60,"value":398},{"type":54,"tag":126,"props":2537,"children":2538},{"class":128,"line":418},[2539],{"type":54,"tag":126,"props":2540,"children":2541},{},[2542],{"type":60,"value":2543},"\u002F\u002F Connect with StackExchange.Redis\n",{"type":54,"tag":126,"props":2545,"children":2546},{"class":128,"line":427},[2547],{"type":54,"tag":126,"props":2548,"children":2549},{},[2550],{"type":60,"value":2551},"var connectionString = $\"{cache.Value.Data.HostName}:{cache.Value.Data.SslPort},password={keys.Value.PrimaryKey},ssl=True,abortConnect=False\";\n",{"type":54,"tag":126,"props":2553,"children":2554},{"class":128,"line":436},[2555],{"type":54,"tag":126,"props":2556,"children":2557},{},[2558],{"type":60,"value":2559},"var connection = ConnectionMultiplexer.Connect(connectionString);\n",{"type":54,"tag":126,"props":2561,"children":2562},{"class":128,"line":445},[2563],{"type":54,"tag":126,"props":2564,"children":2565},{},[2566],{"type":60,"value":2567},"var db = connection.GetDatabase();\n",{"type":54,"tag":126,"props":2569,"children":2570},{"class":128,"line":454},[2571],{"type":54,"tag":126,"props":2572,"children":2573},{"emptyLinePlaceholder":395},[2574],{"type":60,"value":398},{"type":54,"tag":126,"props":2576,"children":2577},{"class":128,"line":463},[2578],{"type":54,"tag":126,"props":2579,"children":2580},{},[2581],{"type":60,"value":2582},"\u002F\u002F Data operations\n",{"type":54,"tag":126,"props":2584,"children":2585},{"class":128,"line":472},[2586],{"type":54,"tag":126,"props":2587,"children":2588},{},[2589],{"type":60,"value":2590},"await db.StringSetAsync(\"key\", \"value\");\n",{"type":54,"tag":126,"props":2592,"children":2593},{"class":128,"line":480},[2594],{"type":54,"tag":126,"props":2595,"children":2596},{},[2597],{"type":60,"value":2598},"var value = await db.StringGetAsync(\"key\");\n",{"type":54,"tag":107,"props":2600,"children":2602},{"id":2601},"related-sdks",[2603],{"type":60,"value":2604},"Related SDKs",{"type":54,"tag":1618,"props":2606,"children":2607},{},[2608,2628],{"type":54,"tag":1622,"props":2609,"children":2610},{},[2611],{"type":54,"tag":1626,"props":2612,"children":2613},{},[2614,2619,2623],{"type":54,"tag":1630,"props":2615,"children":2616},{},[2617],{"type":60,"value":2618},"SDK",{"type":54,"tag":1630,"props":2620,"children":2621},{},[2622],{"type":60,"value":1831},{"type":54,"tag":1630,"props":2624,"children":2625},{},[2626],{"type":60,"value":2627},"Install",{"type":54,"tag":1651,"props":2629,"children":2630},{},[2631,2657,2682],{"type":54,"tag":1626,"props":2632,"children":2633},{},[2634,2643,2648],{"type":54,"tag":1658,"props":2635,"children":2636},{},[2637],{"type":54,"tag":122,"props":2638,"children":2640},{"className":2639},[],[2641],{"type":60,"value":2642},"StackExchange.Redis",{"type":54,"tag":1658,"props":2644,"children":2645},{},[2646],{"type":60,"value":2647},"Data plane (get\u002Fset, pub\u002Fsub, streams)",{"type":54,"tag":1658,"props":2649,"children":2650},{},[2651],{"type":54,"tag":122,"props":2652,"children":2654},{"className":2653},[],[2655],{"type":60,"value":2656},"dotnet add package StackExchange.Redis",{"type":54,"tag":1626,"props":2658,"children":2659},{},[2660,2668,2673],{"type":54,"tag":1658,"props":2661,"children":2662},{},[2663],{"type":54,"tag":122,"props":2664,"children":2666},{"className":2665},[],[2667],{"type":60,"value":49},{"type":54,"tag":1658,"props":2669,"children":2670},{},[2671],{"type":60,"value":2672},"Management plane (this SDK)",{"type":54,"tag":1658,"props":2674,"children":2675},{},[2676],{"type":54,"tag":122,"props":2677,"children":2679},{"className":2678},[],[2680],{"type":60,"value":2681},"dotnet add package Azure.ResourceManager.Redis",{"type":54,"tag":1626,"props":2683,"children":2684},{},[2685,2694,2699],{"type":54,"tag":1658,"props":2686,"children":2687},{},[2688],{"type":54,"tag":122,"props":2689,"children":2691},{"className":2690},[],[2692],{"type":60,"value":2693},"Microsoft.Azure.StackExchangeRedis",{"type":54,"tag":1658,"props":2695,"children":2696},{},[2697],{"type":60,"value":2698},"Azure-specific Redis extensions",{"type":54,"tag":1658,"props":2700,"children":2701},{},[2702],{"type":54,"tag":122,"props":2703,"children":2705},{"className":2704},[],[2706],{"type":60,"value":2707},"dotnet add package Microsoft.Azure.StackExchangeRedis",{"type":54,"tag":2709,"props":2710,"children":2711},"style",{},[2712],{"type":60,"value":2713},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2715,"total":2901},[2716,2738,2752,2773,2788,2805,2816,2829,2844,2859,2876,2889],{"slug":2717,"name":2717,"fn":2718,"description":2719,"org":2720,"tags":2721,"stars":2735,"repoUrl":2736,"updatedAt":2737},"rushstack-best-practices","manage Rush monorepos with best practices","Provides best practices and guidance for working with Rush monorepos. Use when the user is working in a Rush-based repository, asks about Rush commands (install, update, build, rebuild), needs help with project selection, dependency management, build caching, subspace configuration, or troubleshooting Rush-specific issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2722,2725,2728,2729,2732],{"name":2723,"slug":2724,"type":15},"Engineering","engineering",{"name":2726,"slug":2727,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":2730,"slug":2731,"type":15},"Project Management","project-management",{"name":2733,"slug":2734,"type":15},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":2739,"name":2739,"fn":2740,"description":2741,"org":2742,"tags":2743,"stars":28,"repoUrl":29,"updatedAt":2751},"azure-ai-agents-persistent-dotnet","build AI agents with Azure .NET SDK","Azure AI Agents Persistent SDK for .NET. Low-level SDK for creating and managing AI agents with threads, messages, runs, and tools. Use for agent CRUD, conversation threads, streaming responses, function calling, file search, and code interpreter. Triggers: \"PersistentAgentsClient\", \"persistent agents\", \"agent threads\", \"agent runs\", \"streaming agents\", \"function calling agents .NET\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2744,2745,2747,2748],{"name":20,"slug":21,"type":15},{"name":2746,"slug":35,"type":15},"Agents",{"name":13,"slug":14,"type":15},{"name":2749,"slug":2750,"type":15},"LLM","llm","2026-07-03T16:32:10.297433",{"slug":2753,"name":2753,"fn":2754,"description":2755,"org":2756,"tags":2757,"stars":28,"repoUrl":29,"updatedAt":2772},"azure-ai-anomalydetector-java","build anomaly detection applications with Java","Build anomaly detection applications with Azure AI Anomaly Detector SDK for Java. Use when implementing univariate\u002Fmultivariate anomaly detection, time-series analysis, or AI-powered monitoring.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2758,2761,2762,2765,2768,2769],{"name":2759,"slug":2760,"type":15},"Analytics","analytics",{"name":13,"slug":14,"type":15},{"name":2763,"slug":2764,"type":15},"Data Analysis","data-analysis",{"name":2766,"slug":2767,"type":15},"Java","java",{"name":9,"slug":8,"type":15},{"name":2770,"slug":2771,"type":15},"Monitoring","monitoring","2026-05-13T06:14:16.261754",{"slug":2774,"name":2774,"fn":2775,"description":2776,"org":2777,"tags":2778,"stars":28,"repoUrl":29,"updatedAt":2787},"azure-ai-contentsafety-java","build content moderation applications with Azure AI","Build content moderation applications with Azure AI Content Safety SDK for Java. Use when implementing text\u002Fimage analysis, blocklist management, or harm detection for hate, violence, sexual content, and self-harm.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2779,2782,2783,2784],{"name":2780,"slug":2781,"type":15},"AI Infrastructure","ai-infrastructure",{"name":13,"slug":14,"type":15},{"name":2766,"slug":2767,"type":15},{"name":2785,"slug":2786,"type":15},"Security","security","2026-07-07T06:53:31.293235",{"slug":2789,"name":2789,"fn":2790,"description":2791,"org":2792,"tags":2793,"stars":28,"repoUrl":29,"updatedAt":2804},"azure-ai-contentsafety-py","detect harmful content with Azure AI Content Safety","Azure AI Content Safety SDK for Python. Use for detecting harmful content in text and images with multi-severity classification.\nTriggers: \"azure-ai-contentsafety\", \"ContentSafetyClient\", \"content moderation\", \"harmful content\", \"text analysis\", \"image analysis\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2794,2795,2798,2799,2800,2803],{"name":13,"slug":14,"type":15},{"name":2796,"slug":2797,"type":15},"Compliance","compliance",{"name":2749,"slug":2750,"type":15},{"name":9,"slug":8,"type":15},{"name":2801,"slug":2802,"type":15},"Python","python",{"name":2785,"slug":2786,"type":15},"2026-07-18T05:14:23.017504",{"slug":2806,"name":2806,"fn":2807,"description":2808,"org":2809,"tags":2810,"stars":28,"repoUrl":29,"updatedAt":2815},"azure-ai-language-conversations-py","implement conversational language understanding with Python","Implement Conversational Language Understanding (CLU) using the azure-ai-language-conversations Python SDK. Use when working with ConversationAnalysisClient to analyze conversation intent and entities, building NLP features, or integrating language understanding into applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2811,2812,2813,2814],{"name":2759,"slug":2760,"type":15},{"name":13,"slug":14,"type":15},{"name":2749,"slug":2750,"type":15},{"name":2801,"slug":2802,"type":15},"2026-07-31T05:54:29.068751",{"slug":2817,"name":2817,"fn":2818,"description":2819,"org":2820,"tags":2821,"stars":28,"repoUrl":29,"updatedAt":2828},"azure-ai-translation-text-py","translate text using Azure AI services","Azure AI Text Translation SDK for real-time text translation, transliteration, language detection, and dictionary lookup. Use for translating text content in applications.\nTriggers: \"text translation\", \"translator\", \"translate text\", \"transliterate\", \"TextTranslationClient\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2822,2825,2826,2827],{"name":2823,"slug":2824,"type":15},"API Development","api-development",{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":2801,"slug":2802,"type":15},"2026-07-18T05:14:16.988376",{"slug":2830,"name":2830,"fn":2831,"description":2832,"org":2833,"tags":2834,"stars":28,"repoUrl":29,"updatedAt":2843},"azure-ai-vision-imageanalysis-py","analyze images with Azure AI Vision","Azure AI Vision Image Analysis SDK for captions, tags, objects, OCR, people detection, and smart cropping. Use for computer vision and image understanding tasks.\nTriggers: \"image analysis\", \"computer vision\", \"OCR\", \"object detection\", \"ImageAnalysisClient\", \"image caption\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2835,2836,2839,2842],{"name":13,"slug":14,"type":15},{"name":2837,"slug":2838,"type":15},"Computer Vision","computer-vision",{"name":2840,"slug":2841,"type":15},"Images","images",{"name":2801,"slug":2802,"type":15},"2026-07-18T05:14:18.007737",{"slug":2845,"name":2845,"fn":2846,"description":2847,"org":2848,"tags":2849,"stars":28,"repoUrl":29,"updatedAt":2858},"azure-appconfiguration-java","manage configuration with Azure App Configuration","Azure App Configuration SDK for Java. Centralized application configuration management with key-value settings, feature flags, and snapshots.\nTriggers: \"ConfigurationClient java\", \"app configuration java\", \"feature flag java\", \"configuration setting java\", \"azure config java\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2850,2851,2854,2857],{"name":13,"slug":14,"type":15},{"name":2852,"slug":2853,"type":15},"Configuration","configuration",{"name":2855,"slug":2856,"type":15},"Feature Flags","feature-flags",{"name":2766,"slug":2767,"type":15},"2026-07-03T16:32:01.278468",{"slug":2860,"name":2860,"fn":2861,"description":2862,"org":2863,"tags":2864,"stars":28,"repoUrl":29,"updatedAt":2875},"azure-cosmos-rust","build applications with Azure Cosmos DB","Azure Cosmos DB library for Rust (NoSQL API). Document CRUD, containers, and globally distributed data.\nTriggers: \"cosmos db rust\", \"CosmosClient rust\", \"document crud rust\", \"NoSQL rust\", \"partition key rust\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2865,2868,2869,2872],{"name":2866,"slug":2867,"type":15},"Cosmos DB","cosmos-db",{"name":23,"slug":24,"type":15},{"name":2870,"slug":2871,"type":15},"NoSQL","nosql",{"name":2873,"slug":2874,"type":15},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":2877,"name":2877,"fn":2861,"description":2878,"org":2879,"tags":2880,"stars":28,"repoUrl":29,"updatedAt":2888},"azure-cosmos-ts","Azure Cosmos DB JavaScript\u002FTypeScript SDK (@azure\u002Fcosmos) for data plane operations. Use for CRUD operations on documents, queries, bulk operations, and container management. Triggers: \"Cosmos DB\", \"@azure\u002Fcosmos\", \"CosmosClient\", \"document CRUD\", \"NoSQL queries\", \"bulk operations\", \"partition key\", \"container.items\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2881,2882,2883,2884,2885],{"name":2866,"slug":2867,"type":15},{"name":23,"slug":24,"type":15},{"name":9,"slug":8,"type":15},{"name":2870,"slug":2871,"type":15},{"name":2886,"slug":2887,"type":15},"TypeScript","typescript","2026-07-03T16:31:19.368382",{"slug":2890,"name":2890,"fn":2891,"description":2892,"org":2893,"tags":2894,"stars":28,"repoUrl":29,"updatedAt":2900},"azure-data-tables-java","build table storage applications with Java","Build table storage applications with Azure Tables SDK for Java. Use when working with Azure Table Storage or Cosmos DB Table API for NoSQL key-value data, schemaless storage, or structured data at scale.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2895,2896,2897,2898,2899],{"name":13,"slug":14,"type":15},{"name":2866,"slug":2867,"type":15},{"name":23,"slug":24,"type":15},{"name":2766,"slug":2767,"type":15},{"name":2870,"slug":2871,"type":15},"2026-05-13T06:14:17.582229",267,{"items":2903,"total":2957},[2904,2911,2920,2927,2936,2943,2950],{"slug":2739,"name":2739,"fn":2740,"description":2741,"org":2905,"tags":2906,"stars":28,"repoUrl":29,"updatedAt":2751},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2907,2908,2909,2910],{"name":20,"slug":21,"type":15},{"name":2746,"slug":35,"type":15},{"name":13,"slug":14,"type":15},{"name":2749,"slug":2750,"type":15},{"slug":2753,"name":2753,"fn":2754,"description":2755,"org":2912,"tags":2913,"stars":28,"repoUrl":29,"updatedAt":2772},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2914,2915,2916,2917,2918,2919],{"name":2759,"slug":2760,"type":15},{"name":13,"slug":14,"type":15},{"name":2763,"slug":2764,"type":15},{"name":2766,"slug":2767,"type":15},{"name":9,"slug":8,"type":15},{"name":2770,"slug":2771,"type":15},{"slug":2774,"name":2774,"fn":2775,"description":2776,"org":2921,"tags":2922,"stars":28,"repoUrl":29,"updatedAt":2787},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2923,2924,2925,2926],{"name":2780,"slug":2781,"type":15},{"name":13,"slug":14,"type":15},{"name":2766,"slug":2767,"type":15},{"name":2785,"slug":2786,"type":15},{"slug":2789,"name":2789,"fn":2790,"description":2791,"org":2928,"tags":2929,"stars":28,"repoUrl":29,"updatedAt":2804},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2930,2931,2932,2933,2934,2935],{"name":13,"slug":14,"type":15},{"name":2796,"slug":2797,"type":15},{"name":2749,"slug":2750,"type":15},{"name":9,"slug":8,"type":15},{"name":2801,"slug":2802,"type":15},{"name":2785,"slug":2786,"type":15},{"slug":2806,"name":2806,"fn":2807,"description":2808,"org":2937,"tags":2938,"stars":28,"repoUrl":29,"updatedAt":2815},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2939,2940,2941,2942],{"name":2759,"slug":2760,"type":15},{"name":13,"slug":14,"type":15},{"name":2749,"slug":2750,"type":15},{"name":2801,"slug":2802,"type":15},{"slug":2817,"name":2817,"fn":2818,"description":2819,"org":2944,"tags":2945,"stars":28,"repoUrl":29,"updatedAt":2828},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2946,2947,2948,2949],{"name":2823,"slug":2824,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":2801,"slug":2802,"type":15},{"slug":2830,"name":2830,"fn":2831,"description":2832,"org":2951,"tags":2952,"stars":28,"repoUrl":29,"updatedAt":2843},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2953,2954,2955,2956],{"name":13,"slug":14,"type":15},{"name":2837,"slug":2838,"type":15},{"name":2840,"slug":2841,"type":15},{"name":2801,"slug":2802,"type":15},38]