如何在Redis容量限制下保持熱點數據
當數據庫有100萬條數據但Redis只能保存10萬條時,需要智能的策略來確保Redis中存儲的都是最常訪問的熱點數據。以下是幾種有效的解決方案:
一、內存淘汰策略
Redis提供了多種內存淘汰機制,當內存不足時會自動刪除部分數據:
策略 | 命令/配置 | 特點 | 適用場景 |
---|---|---|---|
LRU淘汰 | maxmemory-policy allkeys-lru | 淘汰最近最少使用的鍵 | 通用場景 |
LFU淘汰 | maxmemory-policy allkeys-lfu | 淘汰使用頻率最低的鍵 | 熱點數據場景 |
TTL淘汰 | maxmemory-policy volatile-ttl | 淘汰剩余存活時間短的鍵 | 帶過期時間的數據 |
隨機淘汰 | maxmemory-policy allkeys-random | 隨機淘汰鍵 | 性能優先 |
推薦配置:
# redis.conf 配置
maxmemory 1gb # 根據實際內存設置
maxmemory-policy allkeys-lfu # 生產環境推薦LFU
二、多級緩存架構
1. 分層緩存設計
用戶請求 → 本地緩存(Caffeine) → Redis緩存 → 數據庫
- 本地緩存:存儲超熱點數據(1萬條)
- Redis緩存:存儲次熱點數據(10萬條)
- 數據庫:全量數據(100萬條)
2. 實現示例
// 偽代碼示例
public Data getData(String key) {// 1. 查本地緩存Data data = localCache.get(key);if (data != null) return data;// 2. 查Redisdata = redis.get(key