此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Data Redis 3.5.3spring-doc.cadn.net.cn

生存时间

存储在 Redis 中的对象可能仅在一定时间内有效。 这对于在 Redis 中持久化短期对象特别有用,而无需在它们达到生命周期结束时手动删除它们。 以秒为单位的过期时间可以使用@RedisHash(timeToLive=…​)以及使用KeyspaceConfiguration.KeyspaceSettings(参见键空间)。spring-doc.cadn.net.cn

可以使用@TimeToLive数字属性或方法上的注释。 但是,请勿申请@TimeToLive在同一类中的方法和属性上。 以下示例显示了@TimeToLive属性和方法上的注释:spring-doc.cadn.net.cn

示例 1.到期时间
public class TimeToLiveOnProperty {

  @Id
  private String id;

  @TimeToLive
  private Long expiration;
}

public class TimeToLiveOnMethod {

  @Id
  private String id;

  @TimeToLive
  public long getTimeToLive() {
  	return new Random().nextLong();
  }
}
使用@TimeToLive读回实际的TTLPTTL来自 Redis 的值。-1 表示对象没有关联的过期时间。

当到期设置为正值时,相应的EXPIRE命令运行。 除了持久化原始副本外,虚拟副本还会持久化在 Redis 中,并设置为在原始副本后五分钟过期。 这样做是为了使存储库支持发布RedisKeyExpiredEvent,将过期值保存在 Spring 的ApplicationEventPublisher每当密钥过期时,即使原始值已被删除。 在使用 Spring Data Redis 存储库的所有连接应用程序上都会收到过期事件。spring-doc.cadn.net.cn

默认情况下,初始化应用程序时禁用密钥到期侦听器。 启动模式可在@EnableRedisRepositoriesRedisKeyValueAdapter以使用应用程序启动侦听器,或在首次插入具有 TTL 的实体时启动侦听器。 看RedisKeyValueAdapter.EnableKeyspaceEvents以获取可能的值。spring-doc.cadn.net.cn

RedisKeyExpiredEvent保存过期域对象的副本以及密钥。spring-doc.cadn.net.cn

延迟或禁用过期事件侦听器启动影响RedisKeyExpiredEvent出版。 禁用的事件侦听器不会发布过期事件。 由于侦听器初始化延迟,延迟启动可能会导致事件丢失。
键空间通知消息侦听器更改notify-keyspace-eventsRedis 中的设置(如果尚未设置)。 现有设置不会被覆盖,因此您必须正确设置这些设置(或将其留空)。 请注意CONFIG在 AWS ElastiCache 上禁用,启用侦听器会导致错误。 要解决此行为,请将keyspaceNotificationsConfigParameter参数设置为空字符串。 这可以防止CONFIG命令用法。
Redis Pub/Sub 消息不是持久性的。 如果密钥在应用程序关闭时过期,则不会处理过期事件,这可能会导致二级索引包含对过期对象的引用。
@EnableKeyspaceEvents(shadowCopy = OFF)禁用虚拟副本的存储并减小 Redis 中的数据大小。RedisKeyExpiredEvent将仅包含id过期密钥的密钥。