From bdc0f83e29281bb46c5fe7a6eb6562f7f0e616af Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期二, 14 二月 2023 15:12:53 +0800 Subject: [PATCH] 启动时清理无效的设备缓存数据,避免设备无法注册 --- src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java | 4 ++++ src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java | 2 ++ src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java | 5 +++++ src/main/java/com/genersoft/iot/vmp/gb28181/task/SipRunner.java | 20 ++++++++++++++++++++ src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java | 25 +++++++++++++++++++++++++ src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java | 3 +++ 6 files changed, 59 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/task/SipRunner.java b/src/main/java/com/genersoft/iot/vmp/gb28181/task/SipRunner.java index 451c589..2ffec09 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/task/SipRunner.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/task/SipRunner.java @@ -69,6 +69,26 @@ // 閲嶇疆cseq璁℃暟 redisCatchStorage.resetAllCSEQ(); // 娓呯悊redis + // 娓呯悊鏁版嵁搴撲笉瀛樺湪浣嗘槸redis涓瓨鍦ㄧ殑鏁版嵁 + List<Device> devicesInDb = deviceService.getAll(); + if (devicesInDb.size() == 0) { + redisCatchStorage.removeAllDevice(); + }else { + List<Device> devicesInRedis = redisCatchStorage.getAllDevices(); + if (devicesInRedis.size() > 0) { + Map<String, Device> deviceMapInDb = new HashMap<>(); + devicesInDb.parallelStream().forEach(device -> { + deviceMapInDb.put(device.getDeviceId(), device); + }); + devicesInRedis.parallelStream().forEach(device -> { + if (deviceMapInDb.get(device.getDeviceId()) == null) { + redisCatchStorage.removeDevice(device.getDeviceId()); + } + }); + } + } + + // 鏌ユ壘鍥芥爣鎺ㄦ祦 List<SendRtpItem> sendRtpItems = redisCatchStorage.queryAllSendRTPServer(); if (sendRtpItems.size() > 0) { diff --git a/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java b/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java index b87c9a7..072519b 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java +++ b/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java @@ -163,4 +163,8 @@ */ ResourceBaceInfo getOverview(); + /** + * 鑾峰彇鎵�鏈夎澶� + */ + List<Device> getAll(); } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java index 7bb9619..d1e7c0b 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java @@ -631,4 +631,9 @@ public ResourceBaceInfo getOverview() { return deviceMapper.getOverview(); } + + @Override + public List<Device> getAll() { + return deviceMapper.getAll(); + } } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java index 15b6d80..1e10469 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java @@ -258,4 +258,7 @@ List<SendRtpItem> queryAllSendRTPServer(); + List<Device> getAllDevices(); + + void removeAllDevice(); } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java index 8143d35..0aed820 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java @@ -280,4 +280,6 @@ @Select("select count(1) as total, sum(online) as online from device") ResourceBaceInfo getOverview(); + @Select("select * from device") + List<Device> getAll(); } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java index e997e4d..4f229d7 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java @@ -665,6 +665,31 @@ } @Override + public void removeAllDevice() { + String scanKey = VideoManagerConstants.DEVICE_PREFIX + userSetting.getServerId() + "_*"; + List<Object> keys = RedisUtil.scan(scanKey); + for (Object key : keys) { + RedisUtil.del((String) key); + } + } + + @Override + public List<Device> getAllDevices() { + String scanKey = VideoManagerConstants.DEVICE_PREFIX + userSetting.getServerId() + "_*"; + List<Device> result = new ArrayList<>(); + List<Object> keys = RedisUtil.scan(scanKey); + for (Object o : keys) { + String key = (String) o; + Device device = JsonUtil.redisJsonToObject(key, Device.class); + if (Objects.nonNull(device)) { // 鍙彇娌℃湁瀛樿繃寰� + result.add(JsonUtil.redisJsonToObject(key, Device.class)); + } + } + + return result; + } + + @Override public Device getDevice(String deviceId) { String key = VideoManagerConstants.DEVICE_PREFIX + userSetting.getServerId() + "_" + deviceId; return JsonUtil.redisJsonToObject(key, Device.class); -- Gitblit v1.8.0