生存时间

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

可以通过对 numeric 属性或 method 使用 annotation 来设置更灵活的过期时间。 但是,不要同时应用于同一类中的方法和属性。 以下示例显示了属性和方法上的注释:@TimeToLive@TimeToLive@TimeToLivespring-doc.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();
  }
}
显式注释属性时,会从 Redis 中读回 actual 或 value。-1 表示对象没有关联的过期时间。@TimeToLiveTTLPTTL

当过期时间设置为正值时,将运行相应的命令。 除了保留原始副本之外,虚拟副本还会保留在 Redis 中,并设置为在原始副本后 5 分钟过期。 这样做是为了使 Repository 支持能够发布 RedisKeyExpiredEvent,每当键过期时,即使原始值已被删除,也会在 Spring 中保存过期的值。 使用 Spring Data Redis 存储库的所有连接的应用程序都会收到过期事件。EXPIREApplicationEventPublisherspring-doc.cn

默认情况下,在初始化应用程序时,密钥过期侦听器处于禁用状态。 可以在应用程序中调整启动模式,也可以在使用应用程序或在首次插入具有 TTL 的实体时调整启动模式。 有关可能的值,请参阅 RedisKeyValueAdapter.EnableKeyspaceEvents@EnableRedisRepositoriesRedisKeyValueAdapterspring-doc.cn

它保存过期的域对象的副本以及密钥。RedisKeyExpiredEventspring-doc.cn

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