Redis的过期策略是什么?

Redis 支持为键设置过期时间,当键过期时会被自动删除。这可以帮助我们管理那些只在指定时间段内有效的键。

Redis 的过期策略主要有:

  1. 定时过期:通过 EXPIRE,SETEX 等命令为键设置固定的过期时间,过期时间一到键就会被删除。
  2. 惰性过期:键过期后不会立即被删除,在有读写请求访问该键时会检查是否过期,如果过期则删除该键并返回错误。这可以减轻Redis的CPU负荷。
  3. 定期过期检查:Redis后台有定期任务会检查所有设置过期时间的键,删除已经过期的键。默认每秒检查10%的设置过期时间的键。

过期键被删除后,仍然可以通过 RESTORE 命令在指定时间内还原该键。这对误操作的键过期有很大帮助。

下面是一个设置Redis键过期时间的Java示例:

Jedis jedis = new Jedis("localhost");
jedis.setex("foo", 60, "bar"); // 设置foo键60秒后过期
jedis.ttl("foo"); // 获取foo键的剩余生存时间
jedis. expire("foo", 30); // 为foo设置30秒的过期时间,覆盖原来的60秒

jedis.get("foo");  // 在30秒内可以获取foo的值
Thread.sleep(31000); 
jedis.get("foo");  // 在31秒后获取foo的值,因为设置了过期时间,所以返回null

jedis.setex("foo", 60, "bar");// 再次为foo设置60秒过期时间
jedis.persist("foo"); // 移除foo的过期时间,foo成为一个持久键

Redis 过期策略,有助于我们合理设置数据的生存周期,使缓存层的数据时刻存储的都是有效数据,不会存储过多已经过了时效的数据。