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