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