2021-06-26 04:54:00
Redis数据淘汰策略主要用于解决内存不足时的数据清理问题,确保写入操作成功,避免直接返回“out of memory”错误。
最大缓存配置
Redis允许用户通过server.maxmemory参数设置最大可用内存(最大支持512G)。合理配置此参数可避免内存竞争,例如在8G服务器上部署4个Redis实例时,每个实例分配1.5G内存可提升服务稳定性。
六种数据淘汰策略
1. volatile-lru
从已设置过期时间的数据集中(server.db[i].expires),淘汰最近最少使用(LRU)的数据。适用于需要优先保留热点数据且对过期时间敏感的场景。
2. volatile-ttl
从已设置过期时间的数据集中,淘汰剩余生存时间(TTL)最短的数据。适用于需要快速清理即将过期数据的场景,如缓存失效时间差异较大的业务。
3. volatile-random
从已设置过期时间的数据集中随机淘汰数据。适用于无特殊优先级需求,仅需简单清理过期数据的场景。
4. allkeys-lru
从所有数据集(server.db[i].dict)中淘汰最近最少使用的数据。适用于全局热点数据优化,但会忽略过期时间设置。
5. allkeys-random
从所有数据集中随机淘汰数据。适用于无热点数据区分需求的场景,但可能误删高频访问数据。
6. no-enviction(禁止驱逐)
禁止任何数据淘汰,内存不足时直接返回错误。适用于对数据完整性要求极高、允许写入失败的场景(如金融交易)。
使用建议
主动为键设置合理的过期时间(expire),可提前清理不活跃数据,减少淘汰策略的触发频率。例如,定期更新缓存的过期时间或结合业务逻辑设置动态过期值,既能提升查询性能,又能降低内存压力。需注意,淘汰策略仅删除键值对,不会触发其他操作。