DeviceAcqTriggerCooldownCache.java 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. package com.usky.rule.cache;
  2. import com.usky.common.redis.core.RedisHelper;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Component;
  5. import java.util.concurrent.TimeUnit;
  6. /**
  7. * 设备采集触发规则成功执行动作后的冷却窗口,避免短时间内频繁上报反复执行同一规则。
  8. */
  9. @Component
  10. public class DeviceAcqTriggerCooldownCache {
  11. private static final String KEY_PREFIX = "ruleEngine:deviceAcqCooldown:";
  12. @Autowired
  13. private RedisHelper redisHelper;
  14. public boolean isInCooldown(Long ruleEngineId, String deviceId) {
  15. return redisHelper.hasKey(buildKey(ruleEngineId, deviceId));
  16. }
  17. /**
  18. * 执行成功后调用,在 {@code cooldownSeconds} 秒内同规则同设备不再触发动作。
  19. */
  20. public void startCooldown(Long ruleEngineId, String deviceId, long cooldownSeconds) {
  21. if (cooldownSeconds <= 0) {
  22. return;
  23. }
  24. redisHelper.set(buildKey(ruleEngineId, deviceId), "1", cooldownSeconds, TimeUnit.SECONDS);
  25. }
  26. private static String buildKey(Long ruleEngineId, String deviceId) {
  27. return KEY_PREFIX + ruleEngineId + ":" + deviceId;
  28. }
  29. }