Spring Data Redis(Repositories-Time To Live)

Time To Live

存储在Redis 中的Objects 可能只在一定时间能有效。这种机制对那些希望短期存活的Objects 特别有用,当它们的生命周期结束时不用手动移除。过期时间以秒为单位,可以通过@RedisHash(timeToLive=…​) 或KeyspaceSettings (see Keyspaces)来设置。

还有更多灵活的过期时间设置方法,如在使用一个数值属性或方法上添加@TimeToLive 注解。但是在同一个类中不能同时给一个方法和一个属性都设置@TimeToLive 注解。

Example 16. Expirations

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 注解,它将从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 过期了,过期事件将不会被处理,这将会导致二级索引中仍然包含着过期对象的引用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值