# 第24章 替換策略:緩存滿了怎麼辦? ## 緩存大小的考量 - Redis 作為緩存時,需要考慮容量設置。 - 例子:MySQL 資料庫 1TB,通常不會建立 1TB 的緩存,性價比太低。 - 常見做法:設置資料庫大小的 15% ~ 30% 作為緩存。 一旦確定了緩存最大容量,比如 4GB,你就可以使用下面這個命令來設定緩存的大小了: `CONFIG SET maxmemory 4gb` ## Redis 緩存有哪些淘汰策略?  ## 不淘汰策略 - **noeviction** - 不進行淘汰。 - 容量滿了後,寫入命令會報錯(但讀操作仍可進行)。 ## 針對設有過期時間的 key(volatile-*) - **volatile-lru**:從有 TTL 的 key 中,淘汰最久未使用的。 - **volatile-lfu**:從有 TTL 的 key 中,淘汰使用頻率最低的。 - **volatile-ttl**:從有 TTL 的 key 中,淘汰剩餘存活時間最短的。 - **volatile-random**:從有 TTL 的 key 中,隨機淘汰。 ## 針對所有 key(allkeys-*) - **allkeys-lru**:在所有 key 中,淘汰最久未使用的。 - **allkeys-lfu**:在所有 key 中,淘汰使用頻率最低的。 - **allkeys-random**:在所有 key 中,隨機淘汰。 ## LRU 的實現細節 - Redis 不會全量排序所有 key,而是**隨機抽樣 (sample)** 一批 key,再挑出最少使用的。 - 可透過 `maxmemory-samples` 調整抽樣數量(預設 5)。 - 抽樣數越大,淘汰結果越接近理想,但性能開銷更高。 ## 策略選擇建議 - **有明顯熱區** → `allkeys-lru` 或 `allkeys-lfu` - **無明顯熱區** → `allkeys-random` - **只有部分 key 需緩存(有 TTL)** → `volatile-lru` / `volatile-lfu` - **嚴格避免刪除數據** → `noeviction`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up