启动时清理无效的设备缓存数据,避免设备无法注册

This commit is contained in:
648540858 2023-02-14 15:12:53 +08:00
parent 81da03d981
commit bdc0f83e29
6 changed files with 59 additions and 0 deletions

View File

@ -69,6 +69,26 @@ public class SipRunner implements CommandLineRunner {
// 重置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) {

View File

@ -163,4 +163,8 @@ public interface IDeviceService {
*/
ResourceBaceInfo getOverview();
/**
* 获取所有设备
*/
List<Device> getAll();
}

View File

@ -631,4 +631,9 @@ public class DeviceServiceImpl implements IDeviceService {
public ResourceBaceInfo getOverview() {
return deviceMapper.getOverview();
}
@Override
public List<Device> getAll() {
return deviceMapper.getAll();
}
}

View File

@ -258,4 +258,7 @@ public interface IRedisCatchStorage {
List<SendRtpItem> queryAllSendRTPServer();
List<Device> getAllDevices();
void removeAllDevice();
}

View File

@ -280,4 +280,6 @@ public interface DeviceMapper {
@Select("select count(1) as total, sum(online) as online from device")
ResourceBaceInfo getOverview();
@Select("select * from device")
List<Device> getAll();
}

View File

@ -664,6 +664,31 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage {
RedisUtil.del(key);
}
@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;