相当于从基础时间开始每固定时间跳动一次,里面时间为调动的时间间隔
//以下需求为记录每五秒整操作的次数
String key = "testKey";
//以 Clock.systemDefaultZone()为基础时间,每五分钟变换一次,.millis()获取到最近一次变换的毫秒数
long millis = Clock.tick(Clock.systemDefaultZone(), Duration.ofMinutes(5)).millis();
//对redis的key值进行增1 以增量的方式将double值存储在变量中
Long count = redisTemplate().opsForValue().increment(key + "_" + millis);
//设置redis过期时间为6分钟
redisTemplate().expire(key, Duration.ofMinutes(6));
Clock.tick获得一个时钟,它返回从指定时钟截断到最近出现的指定持续时间的实例。
截断的时刻将小于接近指定持续时间的实际时刻,最小的时间单位是指定的时间单位。
获得的时钟将只按照指定的持续时间进行滴答(tick)
从Java文档中找到tick的方法签名。
public static Clock tick(Clock baseClock, Duration tickDuration)
1
其中,baseClock是滴答时钟所依据的基础时钟。tickDuration是每个可见刻度的持续时间。
滴答持续时间不能是负值或空值。
对于1毫秒的持续时间,我们可以使用tickMillis,对于1秒的持续时间,我们可以使用tickSeconds,对于1分钟的持续时间,我们可以使用时钟的tickMinutes方法。
以毫秒为单位
当持续时间超过 100 毫秒到 tick 方法时,Clock 的 instant() 方法会将当前时刻截断到最近出现的 100 毫秒持续时间。
截断的瞬间将始终小于基本瞬间。
下一次时钟滴答将在 100 毫秒后发生,直到那时瞬间不会改变。
假设我们传递了 1 毫秒的持续时间。
Clock clock = Clock.tick(Clock.system(zoneId), Duration.ofMillis(1));
1
我们可以改用 tickMillis 方法。
Clock clock = Clock.tickMillis(zoneId);
以秒为单位
当持续时间超过 10 秒到tick 方法时,时钟会将当前瞬间截断到最接近的 10 秒持续时间,最小时间单位为秒。
我们将得到比基本瞬间更短的截断瞬间。
下一个时钟滴答将在 10 秒后发生,直到那时瞬间不会改变。
以分钟为单位
当持续时间超过 5 分钟到tick 方法时,时钟会将当前瞬间截断到最接近的 5 分钟持续时间,最小时间单位为分钟。
我们将得到比基本瞬间更短的截断瞬间。
下一个时钟滴答将在 5 分钟后发生,直到那时瞬间不会改变。