如何在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