如需最新的稳定版本,请使用 Spring Data Redis 3.4.0! |
生存时间
存储在 Redis 中的对象可能仅在一定时间内有效。
这对于在 Redis 中持久保存短期对象特别有用,而无需在它们达到生命周期结束时手动删除它们。
过期时间(以秒为单位)可以通过@RedisHash(timeToLive=…)
以及通过使用KeyspaceConfiguration.KeyspaceSettings
(参见 Keyspaces)。
可以使用@TimeToLive
对 numeric 属性或 method 的注释。
但是,请勿申请@TimeToLive
对同一类中的方法和属性。
以下示例显示了@TimeToLive
对属性和方法的注释:
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();
}
}
使用 显式 Comments 属性@TimeToLive 读回实际的TTL 或PTTL value 从 Redis 获取。-1 表示对象没有关联的过期时间。 |
存储库实现确保通过以下方式订阅 Redis 密钥空间通知RedisMessageListenerContainer
.
当过期时间设置为正值时,相应的EXPIRE
命令。
除了保留原始副本之外,虚拟副本还会保留在 Redis 中,并设置为在原始副本后 5 分钟过期。
这样做是为了使存储库支持能够发布RedisKeyExpiredEvent
中保存 Spring 的ApplicationEventPublisher
每当键过期时,即使原始值已被删除。
使用 Spring Data Redis 存储库的所有连接的应用程序都会收到过期事件。
默认情况下,在初始化应用程序时,密钥过期侦听器处于禁用状态。
启动模式可以在@EnableRedisRepositories
或RedisKeyValueAdapter
以使用应用程序启动侦听器,或者在首次插入具有 TTL 的实体时启动侦听器。
看RedisKeyValueAdapter.EnableKeyspaceEvents
以获取可能的值。
这RedisKeyExpiredEvent
保存过期的域对象的副本以及密钥。
延迟或禁用 expiry 事件侦听器启动影响RedisKeyExpiredEvent 出版。
禁用的事件侦听器不会发布过期事件。
由于侦听器初始化延迟,延迟启动可能会导致事件丢失。 |
keyspace 通知消息侦听器更改notify-keyspace-events 设置(如果尚未设置)。
现有设置不会被覆盖,因此您必须正确设置这些设置(或将其留空)。
请注意,CONFIG 在 AWS ElastiCache 上被禁用,并且启用侦听器会导致错误。
要解决此行为,请将keyspaceNotificationsConfigParameter parameter 设置为空字符串。
这可以防止CONFIG 命令用法。 |
Redis Pub/Sub 消息不是持久的。 如果密钥在应用程序关闭时过期,则不会处理过期事件,这可能会导致二级索引包含对过期对象的引用。 |
@EnableKeyspaceEvents(shadowCopy = OFF) 禁用虚拟副本的存储并减小 Redis 中的数据大小。RedisKeyExpiredEvent 将仅包含id 的密钥。 |