内存优化
内存分析
内存淘汰策略
| 策略 | 说明 |
|---|---|
| noeviction | 不淘汰,内存满时拒绝写入(默认) |
| allkeys-lru | 所有 key 中 LRU 淘汰 |
| allkeys-lfu | 所有 key 中 LFU 淘汰(Redis 4.0+) |
| allkeys-random | 所有 key 中随机淘汰 |
| volatile-lru | 有过期时间的 key 中 LRU 淘汰 |
| volatile-lfu | 有过期时间的 key 中 LFU 淘汰 |
| volatile-random | 有过期时间的 key 中随机淘汰 |
| volatile-ttl | 有过期时间的 key 中 TTL 最短的淘汰 |
内存优化技巧
1. 选择合适的数据结构Key 设计原则
缓存问题
缓存穿透
查询不存在的数据,每次都打到数据库。 解决方案:缓存击穿
热点 key 过期,大量请求打到数据库。 解决方案:缓存雪崩
大量 key 同时过期,数据库压力剧增。 解决方案:缓存一致性
Cache Aside Pattern(推荐):慢查询优化
慢查询配置
避免慢命令
| 慢命令 | 替代方案 |
|---|---|
| KEYS * | SCAN |
| HGETALL | HSCAN 或 HMGET |
| SMEMBERS | SSCAN |
| LRANGE 0 -1 | 分页 LRANGE |
| DEL 大 key | UNLINK |
| FLUSHDB/FLUSHALL | FLUSHDB ASYNC |