| 12345678910111213141516171819202122232425262728293031323334353637 |
- package com.usky.rule.cache;
- import com.usky.common.redis.core.RedisHelper;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Component;
- import java.util.concurrent.TimeUnit;
- /**
- * 设备采集触发规则成功执行动作后的冷却窗口,避免短时间内频繁上报反复执行同一规则。
- */
- @Component
- public class DeviceAcqTriggerCooldownCache {
- private static final String KEY_PREFIX = "ruleEngine:deviceAcqCooldown:";
- @Autowired
- private RedisHelper redisHelper;
- public boolean isInCooldown(Long ruleEngineId, String deviceId) {
- return redisHelper.hasKey(buildKey(ruleEngineId, deviceId));
- }
- /**
- * 执行成功后调用,在 {@code cooldownSeconds} 秒内同规则同设备不再触发动作。
- */
- public void startCooldown(Long ruleEngineId, String deviceId, long cooldownSeconds) {
- if (cooldownSeconds <= 0) {
- return;
- }
- redisHelper.set(buildKey(ruleEngineId, deviceId), "1", cooldownSeconds, TimeUnit.SECONDS);
- }
- private static String buildKey(Long ruleEngineId, String deviceId) {
- return KEY_PREFIX + ruleEngineId + ":" + deviceId;
- }
- }
|