Cost Optimization

    How Do You Reduce Azure Cache for Redis Costs Without Compromising Security or Performance?

    Reduce Azure Cache for Redis costs by 30-55% through right-sizing, reservation commitments, architectural reassessment, and TLS security hardening before the 2028 service retirement.

    Spotto
    February 2026
    25 min read

    An MSP managing 30 Azure tenants discovered that 18 of their clients' Redis instances were using less than 40% of provisioned memory -- yet every one was running on Premium tier. After right-sizing and applying reservations, monthly spend dropped from $45,000 to $22,000.

    Azure Cache for Redis is one of the most widely deployed caching services on Azure, but it is also one of the most commonly over-provisioned. Organizations select Premium tier "just in case," size instances for peak traffic that occurs a few hours per week, and leave non-SSL ports open because "that's how it was set up."

    With Microsoft announcing the retirement of Azure Cache for Redis by 2028 in favour of Azure Managed Redis, there is an urgent window to optimize current spend, harden security, and build a clean baseline for migration.

    What Problem This Solves

    Most Azure Cache for Redis deployments suffer from one or more of the following cost and security anti-patterns:

    Static sizing at peak -- Instances are provisioned for the busiest hour of the week and sit idle the other 167 hours. Memory utilization below 40% is common, yet teams fear downscaling because Redis operations are single-threaded and performance impact is hard to predict.
    Pay-as-you-go on continuous workloads -- Production caches run 24/7 for years without reservation commitments. A 1-year reservation saves up to 35%; a 3-year reservation saves up to 55%. Yet many organizations pay the full on-demand rate simply because no one has modelled the commitment.
    Premium features unused -- Premium tier is selected for clustering or geo-replication, but the actual workload uses neither. Standard tier provides the same SLA at significantly lower cost for simple key-value caching.
    Redundant cache layers -- Redis duplicates data already available in Cosmos DB or SQL with sub-10ms latency, or acts as a message broker when Azure Service Bus would be cheaper and more reliable.
    Non-SSL port exposure -- Port 6379 remains open on production instances, transmitting credentials and data in cleartext. This is a compliance violation in most frameworks (PCI-DSS, SOC 2, ISO 27001) and an active security risk.

    This guide provides a systematic approach to each of these problems, with specific Azure CLI commands, cost models, and implementation sequences.

    Azure Cache for Redis Tier Comparison Reference

    Before optimizing, you need a clear view of what each tier provides and what it costs. The following table summarizes the current Azure Cache for Redis and Azure Managed Redis tiers.

    TierMemory RangeKey FeaturesStatus
    Basic250 MB - 53 GBSingle node, no SLA, dev/test onlyRetiring 2028
    Standard250 MB - 53 GBReplicated, 99.9% SLA, automatic failoverRetiring 2028
    Premium6 GB - 120 GBClustering, geo-replication, VNET, persistence, zone redundancyRetiring 2028
    Enterprise12 GB - 100 GBRedis Enterprise modules, active geo-replication, 99.999% SLARetiring 2028
    Enterprise Flash300 GB - 4.5 TBNVMe flash storage, cost-effective large datasetsRetiring 2028
    Azure Managed Redis1 GB - 4.5 TB+Valkey-based, flexible tiers, active geo-replication, modern architectureGA (Replacement)

    Migration constraint: There is no in-place upgrade path from Azure Cache for Redis to Azure Managed Redis. Migration requires a new resource deployment and data transfer. This makes it even more important to right-size and optimize your current deployment first -- you want to migrate the right workload, not the over-provisioned one.

    How It Works

    Cost Optimization

    Right-Sizing: Matching Tier and SKU to Actual Usage

    Right-sizing is the single highest-impact optimization for Azure Cache for Redis. The decision process follows a clear flowchart:

    Right-Sizing Decision Flowchart
    ================================
    
    [Start] Does the workload use clustering, geo-replication, or VNET injection?
      |
      +-- YES --> Premium tier required. Right-size the SKU within Premium.
      |             |
      |             +-- Check: Is memory utilization consistently < 50%?
      |                   |
      |                   +-- YES --> Downsize to next smaller Premium SKU
      |                   +-- NO  --> Current SKU is appropriate
      |
      +-- NO  --> Does the workload require an SLA?
            |
            +-- YES --> Standard tier. Right-size the SKU within Standard.
            |             |
            |             +-- Check: Is memory utilization consistently < 50%?
            |                   |
            |                   +-- YES --> Downsize to next smaller Standard SKU
            |                   +-- NO  --> Current SKU is appropriate
            |
            +-- NO  --> Basic tier (dev/test only).
                          |
                          +-- Check: Is this a production workload?
                                |
                                +-- YES --> Move to Standard (SLA required)
                                +-- NO  --> Basic is acceptable for dev/test

    Tier memory limits for reference:

    Basic/Standard C0: 250 MB | C1: 1 GB | C2: 2.5 GB | C3: 6 GB | C4: 13 GB | C5: 26 GB | C6: 53 GB
    Premium P1: 6 GB | P2: 13 GB | P3: 26 GB | P4: 53 GB | P5: 120 GB

    Use Azure Monitor to query actual memory and CPU usage over the past 30 days. The following query returns the peak and average memory utilization:

    # Query Azure Monitor metrics for Redis memory utilization (last 30 days)
    az monitor metrics list \
      --resource "/subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.Cache/redis/{name}" \
      --metric "usedmemorypercentage" \
      --interval PT1H \
      --start-time $(date -u -d '30 days ago' +%Y-%m-%dT%H:%M:%SZ) \
      --end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) \
      --aggregation Maximum Average \
      --output table

    If the maximum memory utilization over 30 days is below 50%, the instance is a strong candidate for downsizing. Audit Premium feature usage before downgrading tier:

    # Audit Premium feature usage across all Redis instances
    az redis list --output json | jq -r '
      .[] | select(.sku.family == "P") |
      {
        name: .name,
        resourceGroup: .resourceGroup,
        sku: .sku.name,
        shardCount: .shardCount,
        subnetId: (.subnetId // "none"),
        linkedServers: (.linkedServers | length),
        persistence: (if .redisConfiguration.rdbBackupEnabled == "true" then "enabled" else "disabled" end)
      }' | jq -s '.'

    If shardCount is 0 or 1, subnetId is "none," linkedServers is 0, and persistence is "disabled," the instance is not using any Premium-exclusive features and can be downgraded to Standard tier.

    Key insight: In the MSP scenario at the top of this article, 14 of 18 over-provisioned instances had zero Premium feature usage. Moving them to Standard tier saved 40% before any further optimization.

    Reservations: Committed-Use Discounts

    Azure Reservations provide the second-largest cost lever for Redis. The discount structure is straightforward:

    1-year reservation: Up to 35% discount on the hourly rate
    3-year reservation: Up to 55% discount on the hourly rate

    The decision framework should consider both the immediate savings and the service retirement timeline:

    Reservation Decision Tree
    =========================
    
    [Start] Is the Redis instance expected to run for 12+ months?
      |
      +-- NO  --> Pay-as-you-go (no commitment)
      |
      +-- YES --> Is the workload stable (no planned migration in < 12 months)?
            |
            +-- NO  --> Pay-as-you-go or short-term savings plan
            |
            +-- YES --> Consider retirement timeline:
                  |
                  +-- Current date + 1 year < retirement date (2028)?
                  |     |
                  |     +-- YES --> 1-year reservation (up to 35% savings)
                  |     +-- NO  --> Pay-as-you-go (migration imminent)
                  |
                  +-- Current date + 3 years < retirement date?
                        |
                        +-- YES --> 3-year reservation (up to 55% savings)
                        +-- NO  --> 1-year reservation maximum
    
    Note: As of Feb 2026, a 1-year reservation still provides
    ~22 months of discounted usage before the 2028 retirement.
    A 3-year reservation extends beyond the retirement window
    and would require careful evaluation of Microsoft's refund/
    transfer policy for retired services.

    Important: Always right-size before purchasing reservations. Buying a reservation on an over-provisioned instance locks in the waste for 1-3 years. Optimize first, commit second.

    Automated Scaling

    For workloads with predictable daily or weekly traffic patterns, scheduled scaling can reduce costs by scaling down during off-peak hours. Azure Cache for Redis supports tier and SKU changes via the management API, though the operation takes several minutes and involves a brief connectivity interruption.

    The following PowerShell runbook can be deployed as an Azure Automation runbook with a recurring schedule:

    # Azure Automation Runbook: Scheduled Redis Scaling
    # Schedule: Scale down at 20:00 UTC, scale up at 06:00 UTC
    
    param(
        [string]$ResourceGroupName = "rg-production",
        [string]$CacheName = "redis-app-prod",
        [string]$Action = "ScaleDown"  # ScaleDown or ScaleUp
    )
    
    Connect-AzAccount -Identity
    
    $cache = Get-AzRedisCache -ResourceGroupName $ResourceGroupName -Name $CacheName
    
    if ($Action -eq "ScaleDown") {
        # Scale from C3 (6 GB) to C2 (2.5 GB) during off-peak
        if ($cache.Sku -eq "Standard" -and $cache.Size -eq "C3") {
            Set-AzRedisCache -ResourceGroupName $ResourceGroupName \
                -Name $CacheName -Size C2
            Write-Output "Scaled down $CacheName from C3 to C2"
        }
    }
    elseif ($Action -eq "ScaleUp") {
        # Scale from C2 (2.5 GB) to C3 (6 GB) before business hours
        if ($cache.Sku -eq "Standard" -and $cache.Size -eq "C2") {
            Set-AzRedisCache -ResourceGroupName $ResourceGroupName \
                -Name $CacheName -Size C3
            Write-Output "Scaled up $CacheName from C2 to C3"
        }
    }

    Failure mode: Redis scaling operations can take 10-30 minutes and may cause brief connection drops. Do not schedule scaling during business-critical processing windows. Always test the scaling path in non-production first and confirm that your application handles transient connection failures gracefully.

    Architecture Reassessment

    Sometimes the most effective cost optimization is eliminating the Redis instance entirely. Two patterns are especially common:

    Pattern 1: Redis Duplicating Cosmos DB

    Many applications cache Cosmos DB results in Redis to reduce latency. But Cosmos DB with a properly tuned indexing policy and partition key strategy often delivers sub-10ms reads natively. The Redis layer adds cost, complexity, and a cache invalidation problem.

    Before: App --> Redis Cache (P2, $650/mo) --> Cosmos DB ($400/mo)
             Total: $1,050/mo
             Latency: 2-5ms (cache hit), 15-25ms (cache miss)
    
    After:  App --> Cosmos DB with optimized indexing ($450/mo)
             Total: $450/mo
             Latency: 5-10ms (consistent)
    
    Savings: $600/mo (57% reduction)
    Trade-off: Slightly higher p50 latency, but more consistent p99

    Pattern 2: Premium Tier for Simple Caching

    A common anti-pattern is deploying Premium P2 (13 GB, ~$650/mo) for a workload that stores 800 MB of session data with no clustering, persistence, or VNET requirements. Standard C3 (6 GB, ~$135/mo) provides identical functionality at 80% lower cost.

    Before: Premium P2 (13 GB)  --> $650/mo
             Actual usage: 800 MB session data
             Premium features used: none
    
    After:  Standard C3 (6 GB)   --> $135/mo
             Headroom: 5.2 GB available
             SLA: 99.9% (same as Premium for non-clustered)
    
    Savings: $515/mo (79% reduction)

    Failure mode warning: Do not downgrade from Premium to Standard if the application relies on Redis persistence (RDB/AOF), VNET injection, or clustering. These features are exclusive to Premium tier and the application will break if removed. Always audit feature usage with the CLI commands above before changing tiers.

    Alternative Messaging Backends

    Redis is frequently used as a lightweight message broker via Pub/Sub or list-based queues. While this works, it lacks durability guarantees -- if the Redis instance restarts, in-flight messages are lost. Azure Service Bus provides a more robust alternative:

    Durability: Messages are persisted and survive restarts
    Dead-letter queues: Failed messages are captured for analysis, not silently dropped
    Cost: Service Bus Standard starts at ~$10/mo for moderate volumes, versus $135+/mo for the smallest production Redis
    Scalability: Service Bus handles millions of messages per day without Redis memory pressure

    If Redis is used exclusively for messaging (no caching), migrating to Service Bus can eliminate the Redis instance entirely.

    Cost Optimization Impact Summary

    RecommendationTypical SavingsComplexityRisk
    Right-size SKU within tier20-50%LowLow (reversible)
    Downgrade Premium to Standard40-80%MediumMedium (requires new resource)
    1-year reservationUp to 35%LowLow (commitment risk)
    3-year reservationUp to 55%LowMedium (long commitment + retirement)
    Scheduled scaling15-30%MediumMedium (connectivity interruption)
    Eliminate redundant cache layer50-100%HighHigh (architecture change)
    Replace Redis messaging with Service Bus80-95%HighMedium (code changes required)

    Security

    Disable Non-SSL Port

    Azure Cache for Redis exposes two ports: 6380 (TLS/SSL) and 6379 (non-SSL). Port 6379 transmits data and authentication credentials in cleartext. Despite being a known security risk, many production instances still have this port enabled because it was the default in early deployments.

    The remediation sequence is:

    Step 1: Verify all client connection strings use port 6380 with ssl=true
    Step 2: Set minimum TLS version to 1.2
    Step 3: Disable the non-SSL port
    Step 4: Rotate access keys (credentials may have been exposed on the cleartext port)
    Step 5: Deploy Azure Policy to prevent re-enabling the non-SSL port
    # Step 2: Enforce TLS 1.2 minimum
    az redis update \
      --name <cache-name> \
      --resource-group <rg-name> \
      --set minimumTlsVersion=1.2
    
    # Step 3: Disable non-SSL port
    az redis update \
      --name <cache-name> \
      --resource-group <rg-name> \
      --set enableNonSslPort=false
    
    # Step 4: Rotate access keys (regenerate primary key)
    az redis regenerate-key \
      --name <cache-name> \
      --resource-group <rg-name> \
      --key-type Primary
    
    # Verify the configuration
    az redis show \
      --name <cache-name> \
      --resource-group <rg-name> \
      --query "{name:name, nonSslPort:enableNonSslPort, tlsVersion:minimumTlsVersion}" \
      --output table

    To enforce this across all subscriptions, deploy an Azure Policy that denies Redis instances with the non-SSL port enabled:

    {
      "mode": "All",
      "policyRule": {
        "if": {
          "allOf": [
            {
              "field": "type",
              "equals": "Microsoft.Cache/redis"
            },
            {
              "field": "Microsoft.Cache/redis/enableNonSslPort",
              "equals": "true"
            }
          ]
        },
        "then": {
          "effect": "deny"
        }
      },
      "parameters": {},
      "displayName": "Azure Cache for Redis should disable non-SSL port",
      "description": "Denies creation or update of Azure Cache for Redis instances with non-SSL port (6379) enabled. All connections must use TLS on port 6380."
    }

    Failure mode warning: Disabling the non-SSL port will immediately break any client connections using port 6379 without TLS. Before making this change, audit all connection strings in application configurations, Key Vault references, and any hardcoded references in legacy code. The key rotation in Step 4 will also invalidate existing primary keys -- ensure all consuming applications are updated to use the new key before rotating.

    Common Questions

    1. Will downscaling Redis cause data loss?

    Scaling within the same tier (e.g., Standard C3 to C2) does not cause data loss -- Azure migrates the data to the new instance. However, the operation takes 10-30 minutes and may cause brief connectivity interruptions. Scaling between tiers (Premium to Standard) requires creating a new resource and migrating data manually.

    2. Can I use reservations if I plan to migrate to Azure Managed Redis?

    Yes, but choose your term carefully. A 1-year reservation purchased in early 2026 will still provide ~22 months of discounted usage before the 2028 retirement. A 3-year reservation extends beyond the retirement window, so you would need to confirm Microsoft's refund or transfer policy for retired services. Generally, 1-year reservations are the safer choice given the retirement timeline.

    3. How do I know if my Premium instance actually needs Premium features?

    Run the Premium feature audit CLI command provided above. If shardCount is 0 or 1, subnetId is "none," linkedServers is 0, and persistence is disabled, the instance is not using Premium-exclusive features. Verify with the application team that no planned features depend on Premium capabilities before downgrading.

    4. Is Azure Managed Redis ready for production?

    Azure Managed Redis reached General Availability (GA) and is supported for production workloads. However, it uses the Valkey engine rather than Redis, so application compatibility should be validated. The migration is not in-place -- it requires a new resource and data transfer, making it a project rather than a simple upgrade.

    5. What is the risk of disabling the non-SSL port?

    The risk is that any client connecting on port 6379 without TLS will immediately fail. The mitigation is to audit all connection strings before making the change. Modern Redis client libraries (StackExchange.Redis, Lettuce, redis-py) all support TLS natively. The configuration change itself is instant and does not require a Redis restart.

    6. Can I apply these optimizations across multiple tenants simultaneously?

    Yes. MSPs can script the audit and right-sizing recommendations across all tenants using Azure Lighthouse or by iterating over subscriptions with the Azure CLI. The policy enforcement for non-SSL port can be applied at the Management Group level to cover all subscriptions at once.

    7. How much does scheduled scaling actually save?

    For a typical workload that is idle 12 hours per day and on weekends, scheduled scaling can reduce costs by 15-30%. The exact savings depend on the SKU difference and the scaling schedule. Note that scaling operations themselves take time and may cause brief interruptions, so this approach works best for workloads with clear off-peak windows.

    8. Should I migrate to Azure Managed Redis now or wait?

    Optimize your current deployment first. Migrating an over-provisioned, misconfigured deployment to Azure Managed Redis just transfers the waste to a new platform. Right-size, apply reservations for the remaining service life, harden security, and then migrate a lean, well-understood workload. This approach reduces both cost and migration risk.

    9. What happens to my reservation when Azure Cache for Redis retires?

    Microsoft has historically allowed reservation exchanges or refunds when services are retired, but this is not guaranteed. Check the current Azure reservation exchange policy before purchasing long-term commitments on services with announced retirement dates. A 1-year reservation is generally safe; a 3-year reservation should be discussed with your Microsoft account team.

    10. How does Spotto help with Redis cost optimization?

    Spotto continuously monitors your Azure Cache for Redis instances and identifies right-sizing opportunities, reservation savings, security gaps (like open non-SSL ports), and redundant cache layers. Rather than running one-off audits, Spotto provides ongoing visibility and alerts when instances drift from optimal configuration -- especially valuable for MSPs managing many tenants.

    Use-Case and Scenario Coverage

    Scenario 1: MSP with 30 Tenants

    Before

    $45,000/mo

    30 tenants, mostly Premium tier, no reservations

    After

    $22,000/mo

    Right-sized tiers + 1-year reservations

    Actions taken: 14 instances moved from Premium to Standard (no Premium features in use). 4 instances downsized within Premium tier. 1-year reservations applied to all 30 instances. Non-SSL port disabled across all tenants via Azure Policy.

    51% savings -- $276,000/year

    Scenario 2: Enterprise E-Commerce Platform

    Before

    $8,200/mo

    Premium P3 caching Cosmos DB product catalog

    After

    $0/mo (Redis eliminated)

    Cosmos DB indexing optimized, Redis removed

    Actions taken: Analysis showed Cosmos DB with optimized partition keys and composite indexes delivered 8ms reads natively. Redis was adding latency on cache misses (25ms round trip) and creating cache invalidation bugs during product updates. Redis instance eliminated entirely, Cosmos DB RU allocation increased slightly.

    100% Redis savings -- $98,400/year

    Scenario 3: SaaS Background Task Queue

    Before

    $162/mo

    Standard C1 used exclusively as message broker

    After

    $5/mo

    Migrated to Azure Service Bus Standard

    Actions taken: Redis was used solely for list-based job queuing with no caching. Messages were lost during Redis restarts, requiring manual re-processing. Migrated to Azure Service Bus with dead-letter queues and message durability. Redis instance decommissioned.

    97% savings -- $1,884/year

    Scenario 4: Enterprise Dev/Test Environments

    Before

    $12,000/mo

    8 Premium P1 instances running 24/7 across dev, QA, staging, UAT

    After

    $3,200/mo

    Downgraded to Standard, scheduled scaling, weekend shutdown

    Actions taken: All 8 instances moved from Premium P1 to Standard C3 (no Premium features needed in non-production). Automated shutdown on weekends and after 20:00 UTC on weekdays via Azure Automation. UAT instances kept running only during sprint review weeks.

    73% savings -- $105,600/year

    Implementation Guidance

    Pre-Optimization Audit Checklist

    Inventory all Azure Cache for Redis instances across all subscriptions
    Record current tier, SKU, and monthly cost for each instance
    Pull 30-day Azure Monitor metrics (memory %, CPU %, connected clients, cache hits/misses)
    Audit Premium feature usage (clustering, VNET, persistence, geo-replication)
    Check non-SSL port status on every instance
    Identify workload purpose (caching, session store, message broker, other)
    Document existing reservation commitments and expiry dates
    Confirm application connection string format (TLS vs non-TLS)

    Preconditions

    Azure CLI or PowerShell Az module installed and authenticated
    Contributor role on target resource groups (or Redis Cache Contributor)
    Azure Monitor diagnostic settings enabled on Redis instances
    Change management approval for production tier or SKU changes
    Maintenance window identified for scaling operations

    Required Inputs

    Subscription IDs for all Azure subscriptions containing Redis instances
    30 days of Azure Monitor metric data (memory, CPU, connections)
    Current Azure pricing for each Redis tier and SKU in your region
    Application architecture documentation (which services connect to which Redis instances)
    Business stakeholder approval for reservation commitments

    Optimization-to-Migration Path

    The following diagram shows how optimization flows into eventual migration:

    Optimization-to-Migration Path
    ===============================
    
    Phase 1: Audit (Week 1-2)
      [Inventory] --> [Metrics Collection] --> [Feature Audit] --> [Security Scan]
           |                |                       |                    |
           v                v                       v                    v
      Instance list    Usage data            Premium features      Non-SSL ports
                                              in use/unused         open/closed
    
    Phase 2: Optimize (Week 3-6)
      [Right-Size SKU] --> [Downgrade Tier] --> [Apply Reservations] --> [Harden Security]
           |                     |                     |                       |
           v                     v                     v                       v
      Smaller SKU          Premium-->Standard    1-year commitment      TLS 1.2 + key rotation
      within tier          where possible        on stable workloads    + policy enforcement
    
    Phase 3: Reassess Architecture (Week 7-10)
      [Cache necessity audit] --> [Messaging audit] --> [Eliminate/Replace]
           |                            |                       |
           v                            v                       v
      Remove redundant            Redis Pub/Sub -->       Decommission
      Redis-over-Cosmos           Service Bus             unused instances
    
    Phase 4: Prepare for Migration (Week 11+)
      [Optimized baseline] --> [Compatibility testing] --> [Azure Managed Redis POC]
           |                          |                            |
           v                          v                            v
      Lean, right-sized         Valkey engine              Migration plan with
      deployment                validation                 known-good config

    Rollout Approach

    Step 1: Non-production first -- Apply all right-sizing and security changes to dev/test environments. Validate that applications function correctly after tier downgrades and non-SSL port disablement. Run for 1 week minimum.
    Step 2: Staging/UAT -- Apply changes to staging environments. Run load tests to validate performance at the new SKU size. Confirm cache hit ratios remain acceptable.
    Step 3: Production (lowest risk first) -- Start with production instances that have the lowest traffic and simplest architecture. Monitor for 48 hours before proceeding.
    Step 4: Production (remaining) -- Roll out to remaining production instances during maintenance windows. Apply one change at a time (right-size first, then security, then reservations).
    Step 5: Reservations last -- Only purchase reservations after all right-sizing is complete and the workload has been stable at the new size for at least 2 weeks. This prevents locking in the wrong commitment.

    Failure Modes

    Memory pressure after downsizing: If the cache evicts keys aggressively after a SKU downgrade, application latency will spike due to cache misses. Monitor the evictedkeys metric closely for 48 hours after any resize.
    Connection failures after TLS enforcement: Legacy applications or scripts using port 6379 will fail immediately. Ensure all connection strings are updated before disabling the non-SSL port.
    Scaling operation timeout: Redis scaling can take up to 30 minutes for large instances. If the operation is interrupted, the instance may be in an inconsistent state. Always initiate scaling during maintenance windows.
    Reservation on wrong SKU: Purchasing a reservation before completing right-sizing locks in waste. Reservations can be exchanged but the process involves support tickets and partial refunds.

    Rollback Strategy

    Every optimization should have a clear rollback path:

    SKU downsize rollback: Scale back up to the previous SKU. Data is preserved. Operation takes 10-30 minutes.
    Tier downgrade rollback: Cannot upgrade in-place from Standard to Premium. Requires creating a new Premium instance and migrating data. Keep the old Premium instance available (stopped but not deleted) for 1 week after migration.
    Non-SSL port rollback: Re-enable the non-SSL port with az redis update --set enableNonSslPort=true. This takes effect within minutes. Remove the Azure Policy deny rule if it blocks the change.
    Architecture change rollback: If a Redis instance was eliminated (e.g., Cosmos DB direct access), re-deploy the Redis instance from ARM/Bicep template and restore the application's cache layer. This is the highest-risk rollback and should be pre-tested.

    Optimize Now, Migrate Prepared

    The 2028 retirement of Azure Cache for Redis is coming regardless of whether you optimize now. But the organizations that right-size, secure, and rationalize their Redis deployments today will have a massive advantage when migration time arrives:

    Lower migration cost -- Fewer instances to migrate, smaller data volumes, simpler architectures
    Faster migration timeline -- Clean, well-documented workloads migrate faster than sprawling, undocumented ones
    Immediate savings -- Every month between now and migration is a month of reduced spend
    Security compliance -- TLS enforcement and key rotation should not wait for migration

    Start with a simple inventory command to see the scope of your optimization opportunity:

    # Inventory all Azure Cache for Redis instances across all subscriptions
    az account list --query "[].id" -o tsv | while read sub; do
      az redis list --subscription "$sub" --output json 2>/dev/null | jq -r '
        .[] | [.name, .resourceGroup, .sku.name, .sku.family, .sku.capacity,
               (.enableNonSslPort // false), .minimumTlsVersion, .provisioningState] |
        @tsv'
    done | column -t -s $'\t' -N "Name,ResourceGroup,SKU,Family,Capacity,NonSSL,TLS,State"

    That single command will tell you which instances are over-provisioned, which have open non-SSL ports, and where to focus your optimization effort. From there, follow the decision flowcharts and implementation sequences in this guide to systematically reduce cost and harden security across your entire Redis estate.

    Key Takeaways and Summary

    Right-sizing is the highest-impact lever -- Most Redis instances are provisioned for peak load and run at less than 40% utilization. Matching the SKU and tier to actual usage saves 20-80%.
    Reservations compound the savings -- After right-sizing, a 1-year reservation adds up to 35% additional savings. Combined with right-sizing, total reductions of 30-55% are typical.
    Question the cache layer itself -- If Redis is duplicating data available in Cosmos DB or acting as a message broker, removing or replacing it can eliminate the cost entirely.
    Security is not optional -- Disabling the non-SSL port and enforcing TLS 1.2 is a compliance requirement and should be implemented immediately, independent of cost optimization.
    Optimize before you migrate -- The 2028 retirement deadline makes optimization urgent. Every dollar saved now is a dollar saved for the 22+ months until migration, and a lean deployment is faster and cheaper to migrate.
    Continuous monitoring prevents drift -- One-off audits help, but workloads change. Spotto provides ongoing visibility so optimizations stay locked in and new inefficiencies are caught early.

    The challenges outlined in this article — cache right-sizing, reservation planning, TLS compliance — are the same ones our customers work through across their Azure environments. The difference is they use Spotto to surface these opportunities automatically, rather than running the analysis by hand.

    Optimize Before You Migrate

    Spotto continuously analyzes your Azure Cache for Redis instances to identify right-sizing opportunities, reservation savings, and security gaps — giving you a lean, compliant baseline for your Azure Managed Redis migration.

    Free Trial

    Disclaimer: This article is provided for informational purposes only and does not constitute professional advice. Azure pricing, features, and service behavior may have changed since publication. Always validate recommendations against your specific environment and consult Microsoft's official documentation before making changes to production infrastructure. Spotto is not liable for any actions taken based on the content of this article.