在 Redis 中,为了监听过期键事件,需要使用 Redis 的 Keyspace Notifications 功能。这一功能允许客户端订阅某些事件的发生,比如键过期、键删除等。
启用过期键监听
在 Redis 的配置文件 redis.conf
中,确保配置项 notify-keyspace-events
包含 'Ex'
。'E'
表示启用过期事件通知,'x'
表示键事件。这可以通过直接在配置文件中设置:
notify-keyspace-events Ex
也可以在 Redis 运行时使用命令设置
CONFIG SET notify-keyspace-events Ex
订阅 Redis 过期事件
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
@Override
public void onMessage(Message message, byte[] pattern) {
});
}
}
注意事项
- 启用 Keyspace Notifications 会有一定的性能开销,因为 Redis 需要处理和传播事件通知。应在可能的情况下限制通知的范围,仅启用必要的事件类型。
- 且通知是一次性的,没有ack机制,若收到通知后处理失败,将不再收到通知。需自行保证收到通知后处理成功。
- 由于Redis key过期删除策略是定期+惰性删除,当key过多时,删除会有延迟。
如果对过期通知实时有要求的场景慎重考虑使用这种方式,引用Redis官方文档描述。
https://redis.io/docs/latest/develop/use/keyspace-notifications/#timing-of-expired-eventshttps://redis.io/docs/latest/develop/use/keyspace-notifications/#timing-of-expired-events