概述
Redis作为高性能内存数据库,其内存资源有限。当数据写入超过maxmemory限制时,若未合理配置内存淘汰策略,将导致写入失败或服务异常。合理配置maxmemory-policy参数,是保障IDC环境下Redis稳定运行的关键。
配置参数简介
在Redis配置文件或运行时通过CONFIG SET命令设置maxmemory(如maxmemory 1gb)和maxmemory-policy。当内存使用达到上限,Redis将按指定策略淘汰key。
八种淘汰策略详解
Redis 4.0+版本支持以下策略(按淘汰范围分类):
- noeviction:不淘汰任何key,写请求直接返回错误(OOM)。适用于不允许丢失数据的场景(如队列、缓存元数据)。
- allkeys-lru:在所有key中淘汰最近最少使用(LRU)的key。最常用,适合缓存场景,对热点数据友好。
- volatile-lru:仅在设置了过期时间的key中淘汰LRU。适合混合存储(缓存+持久化)且能接受部分过期数据丢失。
- allkeys-random:随机淘汰所有key。简单低开销,但无法保证热点数据。
- volatile-random:在过期key中随机淘汰。
- volatile-ttl:淘汰即将过期(TTL最小)的key。适合对数据时效敏感的场景,如会话缓存。
- allkeys-lfu:淘汰最少使用(LFU)的key。Redis 4.0后新增,适合访问频率差异大的场景。
- volatile-lfu:在过期key中淘汰最不常使用。
合理配置建议
IDC运维实践中,推荐以下选型原则:
- 纯缓存场景:优先选择allkeys-lru或allkeys-lfu,保障热点数据命中率。
- 缓存+持久化混合:若部分数据必须保留(如计数器),可设置noeviction并监控内存,或使用volatile-lru配合合理过期时间。
- 关键业务数据避免丢失:应用层做降级处理,同时考虑使用Redis集群分片分散内存压力。
- 监控与动态调整:通过
INFO memory观察evicted_keys指标,结合业务实际调整策略和maxmemory值。
总结
合理配置Redis内存淘汰策略需结合数据重要性、访问模式和资源限制。IDC运维人员应建立常态化监控,避免因单机OOM导致服务雪崩。建议在测试环境验证策略效果后再上线。