diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/scale/monitor/subject/cache/ScaleRuleCache.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/scale/monitor/subject/cache/ScaleRuleCache.java index f5e57865badc..d206c4d711bc 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/scale/monitor/subject/cache/ScaleRuleCache.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/scale/monitor/subject/cache/ScaleRuleCache.java @@ -20,7 +20,9 @@ import org.apache.shenyu.admin.model.entity.ScaleRuleDO; import org.springframework.stereotype.Component; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @Component @@ -56,6 +58,20 @@ public void removeRulesFromCache(final List metricNames) { metricNames.forEach(ruleCache::remove); } + /** + * Removes rules from cache by their primary keys. + * + * @param ids rule primary keys + */ + public void removeRulesByIdsFromCache(final List ids) { + final Set idSet = new HashSet<>(ids); + ruleCache.forEach((metricName, rule) -> { + if (idSet.contains(rule.getId())) { + ruleCache.remove(metricName, rule); + } + }); + } + /** * getAllRules. * diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ScaleRuleServiceImpl.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ScaleRuleServiceImpl.java index 57a66e5928a6..6064a54b31e7 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ScaleRuleServiceImpl.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ScaleRuleServiceImpl.java @@ -140,7 +140,7 @@ public int update(final ScaleRuleDTO scaleRuleDTO) { public int delete(final List ids) { int rows = scaleRuleMapper.delete(ids); if (rows > 0) { - scaleRuleCache.removeRulesFromCache(ids); + scaleRuleCache.removeRulesByIdsFromCache(ids); } return rows; }