Data Redis(Repositories"/>
Spring Data Redis(Repositories
Time To Live
存储在Redis 中的Objects 可能只在一定时间能有效。这种机制对那些希望短期存活的Objects 特别有用,当它们的生命周期结束时不用手动移除。过期时间以秒为单位,可以通过@RedisHash(timeToLive=…) 或KeyspaceSettings (see Keyspaces)来设置。
还有更多灵活的过期时间设置方法,如在使用一个数值属性或方法上添加@TimeToLive 注解。但是在同一个类中不能同时给一个方法和一个属性都设置@TimeToLive 注解。
Example 16. Expirations
public class TimeToLiveOnProperty {@Idprivate String id;@TimeToLiveprivate Long expiration;
}public class TimeToLiveOnMethod {@Idprivate String id;@TimeToLivepublic long getTimeToLive() {return new Random().nextLong();}
}
如果给一个属性明确的添加了@TimeToLive 注解,它将从Redis 读取真实的TTL 或PTTL 值。-1 则表示该object 没有关联过期时间。
仓储的实现确保了对Redis 键空间通知的订阅,使用的是RedisMessageListenerContainer 。
当过期时间设置为一个正数时,相应的EXPIRE 命令会被执行。此外还会持久化一个原始的、有名无实的备份(非原始)在Redis中,并设置5分钟过期时间。这么做是为了使仓储的支持以下功能:当一个key 过期甚至当原始的值已经不存在时,还可以通过Springs ApplicationEventPublisher 来发布拥有过期时间的RedisKeyExpiredEvent 。过期事件将会被接收,被所有使用Spring Data Redis 仓储连接的应用接收。
默认情况下,在初始化应用时key 的过期监听器是不可用的。启动模式可以调整,通过@EnableRedisRepositories 或 RedisKeyValueAdapter 来启动应用的监听器,或者在第一次insert 一个实体时带着TTL。查看EnableKeyspaceEvents 来获取它的有效值。
RedisKeyExpiredEvent 将拥有一个真实过期领域对象的拷贝,key也一样。
过期事件监听器的启动延迟或不可用,将会影响RedisKeyExpiredEvent 的发布。一个不可用的事件监听器不能发布过期事件。由于延迟的监听器初始化,一个延迟的启动会丢失事件。在Redis中,如果没有设置notify-keyspace-events,keyspace 通知消息监听器会更改它。如果已经存在了则不会被覆盖,为了不让它空着,可以让用户来创建。请注意CONFIG在AWS ElastiCache 上有缺陷,使用监听器会导致error。Redis 的Pub/Sub 消息不是持久化的。如果当应用宕掉的时候一个key 过期了,过期事件将不会被处理,这将会导致二级索引中仍然包含着过期对象的引用。
更多推荐
Spring Data Redis(Repositories
发布评论