From 16a6ae336eeb74366136859d0f8e0f102fb1fe90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=B7=E6=88=90=E4=BC=9F?= Date: Wed, 25 Dec 2024 10:32:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=AE=BE=E5=A4=87=E7=BC=93?= =?UTF-8?q?=E5=AD=98BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/EquipmentCacheImpl.java | 54 ++++++------------- 1 file changed, 16 insertions(+), 38 deletions(-) diff --git a/das/src/main/java/com/das/modules/cache/service/impl/EquipmentCacheImpl.java b/das/src/main/java/com/das/modules/cache/service/impl/EquipmentCacheImpl.java index 6ae520b3..6426fa40 100644 --- a/das/src/main/java/com/das/modules/cache/service/impl/EquipmentCacheImpl.java +++ b/das/src/main/java/com/das/modules/cache/service/impl/EquipmentCacheImpl.java @@ -19,13 +19,12 @@ public class EquipmentCacheImpl implements EquipmentCache { @Autowired SysEquipmentMapper sysEquipmentMapper; - private final List deviceInfoCaches = Collections.synchronizedList(new ArrayList<>()); /** * 设备CODE索引,用于通过设备CODE访问设备缓存信息 */ - private final ConcurrentHashMap deviceCodeIndex = new ConcurrentHashMap<>(); - private final ConcurrentHashMap deviceIdIndex = new ConcurrentHashMap<>(); + private final ConcurrentHashMap deviceCodeIndex = new ConcurrentHashMap<>(); + private final ConcurrentHashMap deviceIdIndex = new ConcurrentHashMap<>(); /** * 初始化设备缓存 @@ -44,11 +43,10 @@ public class EquipmentCacheImpl implements EquipmentCache { deviceInfoCache.setMadeinFactory(equipment.getMadeinFactory()); deviceInfoCache.setParentDeviceId(equipment.getParentEquipmentId()); deviceInfoCache.setIotModelId(equipment.getIotModelId()); - deviceInfoCaches.add(deviceInfoCache); //创建Code索引 - deviceCodeIndex.put(deviceInfoCache.getDeviceCode(),i); + deviceCodeIndex.put(deviceInfoCache.getDeviceCode(),deviceInfoCache); //创建Id索引 - deviceIdIndex.put(equipment.getId(),i); + deviceIdIndex.put(equipment.getId(),deviceInfoCache); } } @@ -57,8 +55,8 @@ public class EquipmentCacheImpl implements EquipmentCache { */ @PreDestroy private void freeDeviceInfoCaches() { - deviceInfoCaches.clear(); deviceCodeIndex.clear(); + deviceIdIndex.clear(); } @@ -68,7 +66,7 @@ public class EquipmentCacheImpl implements EquipmentCache { */ @Override public List getDevicesCache() { - return Collections.unmodifiableList(deviceInfoCaches); + return deviceIdIndex.values().stream().toList(); } @Override @@ -84,49 +82,29 @@ public class EquipmentCacheImpl implements EquipmentCache { deviceInfoCache.setObjectType(equipment.getObjectType()); deviceInfoCache.setParentDeviceId(equipment.getParentEquipmentId()); deviceInfoCache.setIotModelId(equipment.getIotModelId()); - //如果是已经缓存过的设备直接缓存 - Integer index = deviceIdIndex.get(deviceId); - if (index != null) { - deviceInfoCaches.set(index, deviceInfoCache); - } - else{ - deviceInfoCaches.add(deviceInfoCache); - index = deviceInfoCaches.size() - 1; - deviceCodeIndex.put(deviceInfoCache.getDeviceCode(),index); - deviceIdIndex.put(equipment.getId(),index); - } + + deviceIdIndex.put(deviceId,deviceInfoCache); + deviceCodeIndex.put(deviceInfoCache.getDeviceCode(),deviceInfoCache); } } @Override public DeviceInfoCache getDeviceInfoCacheByCode(String deviceCode) { - Integer index = deviceCodeIndex.get(deviceCode); - if (index != null) { - return deviceInfoCaches.get(index); - } - return null; + return deviceCodeIndex.get(deviceCode); } @Override public DeviceInfoCache getDeviceInfoCacheById(Long deviceId) { - Integer index = deviceIdIndex.get(deviceId); - if (index != null) { - return deviceInfoCaches.get(index); - } - return null; + return deviceIdIndex.get(deviceId); } @Override public void removeDeviceCache(Long deviceId) { - Integer index = deviceIdIndex.get(deviceId); - if (index != null) { - deviceInfoCaches.remove(index); - //重新刷新索引 - for (int i = index; i < deviceInfoCaches.size(); i++) { - DeviceInfoCache deviceInfoCache = deviceInfoCaches.get(i); - deviceIdIndex.put(deviceInfoCache.getDeviceId(),i); - deviceCodeIndex.put(deviceInfoCache.getDeviceCode(),i); - } + + DeviceInfoCache cache = deviceIdIndex.get(deviceId); + if (cache != null) { + deviceIdIndex.remove(deviceId); + deviceCodeIndex.remove(cache.getDeviceCode()); } }