#32614 [Bug]: Router budget sync can overwrite memory cache with stale Redis spend
### Check for existing issues
I found #20886, but it is closed as stale/not planned and cannot be reopened. This issue adds current-branch verification and additional affected code paths
### What happened?
`RouterBudgetLimiting._push_in_memory_increments_to_redis()` still schedules `redis_cache.async_increment_pipeline(...)` with `asyncio.create_task(...)` and immediately clears the queue. `_sync_in_memory_spend_with_redis()` awaits that method, but the await only waits for task scheduling. It then fetches Redis and writes those values into in-memory cache before the pipeline has necessarily completed
On current `litellm_internal_staging` at `60729f733e`, fetched on 2026-07-09, I reproduced memory being overwritten from `160` to stale Redis `100`. After the background pipeline finishes, Redis is `160`, but memory remains `100`
### Why this matters
`async_filter_deployments()` reads budget spend through `DualCache.async_batch_get_cache()`. `DualCache` returns in-memory values first and only checks Redis for misses, so the stale memory value is trusted by later provider, deployment, and tag budget checks
The same inherited flush method also affects `_PROXY_VirtualKeyModelMaxBu…