1.redis数据过期策略
1.1惰性删除策略
惰性删除:当访问键时,Redis会检查键是否过期,如果过期就删除它。
1.2定期删除策略
定时删除:Redis默认每100ms会随机抽查一些设置了过期时间的键,检查并删除其中已经过期的键。
SLOW模式
slow模式是定时任务,执行频率默认为10hz,每次不超过25ms,已通过修改配置文件redis.conf 的hz选项来调整整个次数.
FAST模式
fast执行频率不固定,但执行两次间隔不低于2ms,每次耗时不超过1ms.
1.3 redis数据过期策略总结
优点:
-惰性删除可以节省CPU资源,只有真正访问时才检查过期,不必消耗额外CPU资源去删除。
-定时删除可以保证过期键会被及时清除,减少内存占用。
缺点:
-如果大量键过期但未被访问,可能导致内存泄漏。
-定时删除可能会造成一定的延迟,因为检查时间间隔是固定的。
Java中实现Redis过期策略通常涉及到设置键的过期时间,并定期检查和删除过期键。
总结
Redis 结合了惰性删除和定期删除策略,以提高内存管理的效率:
-惰性删除:在访问时检查并删除过期键。
-定期删除:通过后台任务定期扫描并删除过期键。
这种组合策略确保了在大多数情况下,过期键能够被及时删除,同时避免了高频率的过期检查所带来的性能开销。
1.4 代码实现
public class RedisExpirationPolicy {
private final Map<String, Long> expireTimes = new HashMap<>();
public void setKeyWithExpireTime(String key, String value, long timeoutSeconds) {
expireTimes.put(key, System.currentTimeMillis() + timeoutSeconds * 1000);
}
public void checkAndDeleteExpiredKeys() {
long currentTime = System.currentTimeMillis();
expireTimes.entrySet().removeIf(entry -> currentTime > entry.getValue());
}
}