Browse Source

优化部分redis scan查询

648540858 1 year ago
parent
commit
189e56c839

+ 5 - 29
src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java

@@ -18,18 +18,7 @@ public class VideoManagerConstants {
 
 	public static final String DEVICE_PREFIX = "VMP_DEVICE_";
 
-	// 设备同步完成
-	public static final String DEVICE_SYNC_PREFIX = "VMP_DEVICE_SYNC_";
-
-	public static final String CACHEKEY_PREFIX = "VMP_CHANNEL_";
-
-	public static final String KEEPLIVEKEY_PREFIX = "VMP_KEEPALIVE_";
-
-	// TODO 此处多了一个_,暂不修改
 	public static final String INVITE_PREFIX = "VMP_INVITE_INFO";
-	public static final String PLAYER_PREFIX = "VMP_INVITE_PLAY_";
-	public static final String PLAY_BLACK_PREFIX = "VMP_INVITE_PLAYBACK_";
-	public static final String DOWNLOAD_PREFIX = "VMP_INVITE_DOWNLOAD_";
 
 	public static final String PLATFORM_KEEPALIVE_PREFIX = "VMP_PLATFORM_KEEPALIVE_";
 
@@ -40,30 +29,18 @@ public class VideoManagerConstants {
 	public static final String PLATFORM_REGISTER_INFO_PREFIX = "VMP_PLATFORM_REGISTER_INFO_";
 
 	public static final String SEND_RTP_INFO = "VMP_SEND_RTP_INFO:";
-	public static final String SEND_RTP_INFO_CALLID = "VMP_SEND_RTP_INFO:CALL_ID";
-	public static final String SEND_RTP_INFO_STREAM = "VMP_SEND_RTP_INFO:STREAM";
-	public static final String SEND_RTP_INFO_CHANNEL = "VMP_SEND_RTP_INFO:CHANNEL";
-
-	public static final String EVENT_ONLINE_REGISTER = "1";
-
-	public static final String EVENT_ONLINE_MESSAGE = "3";
-
-	public static final String EVENT_OUTLINE_UNREGISTER = "1";
-	
-	public static final String EVENT_OUTLINE_TIMEOUT = "2";
-
-	public static final String MEDIA_SSRC_USED_PREFIX = "VMP_MEDIA_USED_SSRC_";
+	public static final String SEND_RTP_INFO_CALLID = "VMP_SEND_RTP_INFO:CALL_ID:";
+	public static final String SEND_RTP_INFO_STREAM = "VMP_SEND_RTP_INFO:STREAM:";
+	public static final String SEND_RTP_INFO_CHANNEL = "VMP_SEND_RTP_INFO:CHANNEL:";
 
 	public static final String SIP_INVITE_SESSION = "VMP_SIP_INVITE_SESSION:";
-	public static final String SIP_INVITE_SESSION_CALL_ID = SIP_INVITE_SESSION + "CALL_ID" + ":";
-	public static final String SIP_INVITE_SESSION_STREAM = SIP_INVITE_SESSION + "STREAM" + ":";
+	public static final String SIP_INVITE_SESSION_CALL_ID = SIP_INVITE_SESSION + "CALL_ID:";
+	public static final String SIP_INVITE_SESSION_STREAM = SIP_INVITE_SESSION + "STREAM:";
 
 	public static final String MEDIA_STREAM_AUTHORITY = "VMP_MEDIA_STREAM_AUTHORITY_";
 
 	public static final String SIP_CSEQ_PREFIX = "VMP_SIP_CSEQ_";
 
-	public static final String SIP_SN_PREFIX = "VMP_SIP_SN_";
-
 	public static final String SIP_SUBSCRIBE_PREFIX = "VMP_SIP_SUBSCRIBE_";
 
 	public static final String SYSTEM_INFO_CPU_PREFIX = "VMP_SYSTEM_INFO_CPU_";
@@ -79,7 +56,6 @@ public class VideoManagerConstants {
 	public static final String PUSH_STREAM_LIST = "VMP_PUSH_STREAM_LIST_";
 	public static final String WAITE_SEND_PUSH_STREAM = "VMP_WAITE_SEND_PUSH_STREAM:";
 	public static final String START_SEND_PUSH_STREAM = "VMP_START_SEND_PUSH_STREAM:";
-	public static final String PUSH_STREAM_ONLINE = "VMP_PUSH_STREAM_ONLINE:";
 
 
 

+ 4 - 12
src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/InviteStreamServiceImpl.java

@@ -79,10 +79,8 @@ public class InviteStreamServiceImpl implements IInviteStreamService {
         InviteInfo inviteInfoForUpdate;
 
         if (InviteSessionStatus.ready == inviteInfo.getStatus()) {
-            if (inviteInfo.getDeviceId() == null
-                    || inviteInfo.getChannelId() == null
-                    || inviteInfo.getType() == null
-                    || inviteInfo.getStream() == null
+            if (inviteInfo.getDeviceId() == null || inviteInfo.getChannelId() == null
+                    || inviteInfo.getType() == null || inviteInfo.getStream() == null
             ) {
                 return;
             }
@@ -118,7 +116,6 @@ public class InviteStreamServiceImpl implements IInviteStreamService {
         }
         String key = VideoManagerConstants.INVITE_PREFIX +
                 ":" + inviteInfoForUpdate.getType() +
-                ":" + inviteInfoForUpdate.getDeviceId() +
                 ":" + inviteInfoForUpdate.getChannelId() +
                 ":" + inviteInfoForUpdate.getStream()+
                 ":" + inviteInfoForUpdate.getSsrcInfo().getSsrc();
@@ -139,7 +136,6 @@ public class InviteStreamServiceImpl implements IInviteStreamService {
         removeInviteInfo(inviteInfoInDb);
         String key = VideoManagerConstants.INVITE_PREFIX +
                 ":" + inviteInfo.getType() +
-                ":" + inviteInfo.getDeviceId() +
                 ":" + inviteInfo.getChannelId() +
                 ":" + stream +
                 ":" + inviteInfo.getSsrcInfo().getSsrc();
@@ -160,7 +156,6 @@ public class InviteStreamServiceImpl implements IInviteStreamService {
     public InviteInfo getInviteInfo(InviteSessionType type, Integer channelId, String stream) {
         String key = VideoManagerConstants.INVITE_PREFIX +
                 ":" + (type != null ? type : "*") +
-                ":*" +
                 ":" + (channelId != null ? channelId : "*") +
                 ":" + (stream != null ? stream : "*")
                 + ":*";
@@ -179,7 +174,6 @@ public class InviteStreamServiceImpl implements IInviteStreamService {
     public List<InviteInfo> getAllInviteInfo(InviteSessionType type, Integer channelId, String stream) {
         String key = VideoManagerConstants.INVITE_PREFIX +
                 ":" + (type != null ? type : "*") +
-                ":*" +
                 ":" + (channelId != null ? channelId : "*") +
                 ":" + (stream != null ? stream : "*")
                 + ":*";
@@ -208,7 +202,6 @@ public class InviteStreamServiceImpl implements IInviteStreamService {
     public void removeInviteInfo(InviteSessionType type,  Integer channelId, String stream) {
         String scanKey = VideoManagerConstants.INVITE_PREFIX +
                 ":" + (type != null ? type : "*") +
-                ":*" +
                 ":" + (channelId != null ? channelId : "*") +
                 ":" + (stream != null ? stream : "*") +
                 ":*";
@@ -267,7 +260,7 @@ public class InviteStreamServiceImpl implements IInviteStreamService {
     @Override
     public int getStreamInfoCount(String mediaServerId) {
         int count = 0;
-        String key = VideoManagerConstants.INVITE_PREFIX + ":*:*:*:*:*";
+        String key = VideoManagerConstants.INVITE_PREFIX + ":*:*:*:*";
         List<Object> scanResult = RedisUtil.scan(redisTemplate, key);
         if (scanResult.isEmpty()) {
             return 0;
@@ -316,7 +309,7 @@ public class InviteStreamServiceImpl implements IInviteStreamService {
 
     @Override
     public InviteInfo getInviteInfoBySSRC(String ssrc) {
-        String key = VideoManagerConstants.INVITE_PREFIX + ":*:*:*:*:" + ssrc;
+        String key = VideoManagerConstants.INVITE_PREFIX + ":*:*:*:" + ssrc;
         List<Object> scanResult = RedisUtil.scan(redisTemplate, key);
         if (scanResult.size() != 1) {
             return null;
@@ -334,7 +327,6 @@ public class InviteStreamServiceImpl implements IInviteStreamService {
         removeInviteInfo(inviteInfoInDb);
         String key = VideoManagerConstants.INVITE_PREFIX +
                 ":" + inviteInfo.getType() +
-                ":" + inviteInfo.getDeviceId() +
                 ":" + inviteInfo.getChannelId() +
                 ":" + inviteInfo.getStream() +
                 ":" + ssrc;

+ 25 - 23
src/main/java/com/genersoft/iot/vmp/service/impl/SendRtpServerServiceImpl.java

@@ -65,14 +65,14 @@ public class SendRtpServerServiceImpl implements ISendRtpServerService {
     @Override
     public void update(SendRtpInfo sendRtpItem) {
         redisTemplate.opsForValue().set(VideoManagerConstants.SEND_RTP_INFO_CALLID + sendRtpItem.getCallId(), sendRtpItem);
-        redisTemplate.opsForValue().set(VideoManagerConstants.SEND_RTP_INFO_STREAM + sendRtpItem.getStream() + ":" + sendRtpItem.getTargetId(), sendRtpItem);
-        redisTemplate.opsForValue().set(VideoManagerConstants.SEND_RTP_INFO_CHANNEL + sendRtpItem.getChannelId() + ":" + sendRtpItem.getTargetId(), sendRtpItem);
+        redisTemplate.opsForHash().put(VideoManagerConstants.SEND_RTP_INFO_STREAM + sendRtpItem.getStream(), sendRtpItem.getTargetId(), sendRtpItem);
+        redisTemplate.opsForHash().put(VideoManagerConstants.SEND_RTP_INFO_CHANNEL + sendRtpItem.getChannelId(), sendRtpItem.getTargetId(), sendRtpItem);
     }
 
     @Override
     public SendRtpInfo queryByChannelId(Integer channelId, String targetId) {
-        String key = VideoManagerConstants.SEND_RTP_INFO_CHANNEL + channelId + ":" + targetId;
-        return JsonUtil.redisJsonToObject(redisTemplate, key, SendRtpInfo.class);
+        String key = VideoManagerConstants.SEND_RTP_INFO_CHANNEL + channelId;
+        return JsonUtil.redisHashJsonToObject(redisTemplate, key, targetId, SendRtpInfo.class);
     }
 
     @Override
@@ -83,19 +83,17 @@ public class SendRtpServerServiceImpl implements ISendRtpServerService {
 
     @Override
     public SendRtpInfo queryByStream(String stream, String targetId) {
-        String key = VideoManagerConstants.SEND_RTP_INFO_STREAM + stream + ":" + targetId;
-        return JsonUtil.redisJsonToObject(redisTemplate, key, SendRtpInfo.class);
+        String key = VideoManagerConstants.SEND_RTP_INFO_STREAM + stream;
+        return JsonUtil.redisHashJsonToObject(redisTemplate, key, targetId, SendRtpInfo.class);
     }
 
     @Override
     public List<SendRtpInfo> queryByStream(String stream) {
-        String key = VideoManagerConstants.SEND_RTP_INFO_STREAM + stream + ":*";
-        List<Object> queryResult = RedisUtil.scan(redisTemplate, key);
+        String key = VideoManagerConstants.SEND_RTP_INFO_STREAM + stream;
+        List<Object> values = redisTemplate.opsForHash().values(key);
         List<SendRtpInfo> result= new ArrayList<>();
-
-        for (Object o : queryResult) {
-            String keyItem = (String) o;
-            result.add((SendRtpInfo) redisTemplate.opsForValue().get(keyItem));
+        for (Object o : values) {
+            result.add((SendRtpInfo) o);
         }
 
         return result;
@@ -110,8 +108,16 @@ public class SendRtpServerServiceImpl implements ISendRtpServerService {
             return;
         }
         redisTemplate.delete(VideoManagerConstants.SEND_RTP_INFO_CALLID + sendRtpInfo.getCallId());
-        redisTemplate.delete(VideoManagerConstants.SEND_RTP_INFO_STREAM + sendRtpInfo.getStream() + ":" + sendRtpInfo.getTargetId());
-        redisTemplate.delete(VideoManagerConstants.SEND_RTP_INFO_CHANNEL + sendRtpInfo.getChannelId() + ":" + sendRtpInfo.getTargetId());
+        if (redisTemplate.opsForHash().size(VideoManagerConstants.SEND_RTP_INFO_STREAM + sendRtpInfo.getStream()) == 0) {
+            redisTemplate.delete(VideoManagerConstants.SEND_RTP_INFO_STREAM + sendRtpInfo.getStream());
+        }else {
+            redisTemplate.opsForHash().delete(VideoManagerConstants.SEND_RTP_INFO_STREAM + sendRtpInfo.getStream(), sendRtpInfo.getTargetId());
+        }
+        if (redisTemplate.opsForHash().size(VideoManagerConstants.SEND_RTP_INFO_CHANNEL + sendRtpInfo.getChannelId()) == 0) {
+            redisTemplate.delete(VideoManagerConstants.SEND_RTP_INFO_CHANNEL + sendRtpInfo.getChannelId());
+        }else {
+            redisTemplate.opsForHash().delete(VideoManagerConstants.SEND_RTP_INFO_CHANNEL + sendRtpInfo.getChannelId(), sendRtpInfo.getTargetId());
+        }
     }
     @Override
     public void deleteByCallId(String callId) {
@@ -149,22 +155,18 @@ public class SendRtpServerServiceImpl implements ISendRtpServerService {
 
     @Override
     public List<SendRtpInfo> queryByChannelId(int channelId) {
-        String key = VideoManagerConstants.SEND_RTP_INFO_CHANNEL + channelId + ":*";
-        List<Object> queryResult = RedisUtil.scan(redisTemplate, key);
+        String key = VideoManagerConstants.SEND_RTP_INFO_CHANNEL + channelId;
+        List<Object> values = redisTemplate.opsForHash().values(key);
         List<SendRtpInfo> result= new ArrayList<>();
-
-        for (Object o : queryResult) {
-            String keyItem = (String) o;
-            result.add((SendRtpInfo) redisTemplate.opsForValue().get(keyItem));
+        for (Object o : values) {
+            result.add((SendRtpInfo) o);
         }
-
         return result;
     }
 
     @Override
     public List<SendRtpInfo> queryAll() {
-        String key = VideoManagerConstants.SEND_RTP_INFO_CALLID
-                + userSetting.getServerId() + ":*";
+        String key = VideoManagerConstants.SEND_RTP_INFO_CALLID + ":*";
         List<Object> queryResult = RedisUtil.scan(redisTemplate, key);
         List<SendRtpInfo> result= new ArrayList<>();
 

+ 1 - 0
src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java

@@ -98,6 +98,7 @@ public interface IRedisCatchStorage {
     void updateGpsMsgInfo(GPSMsgInfo gpsMsgInfo);
 
     GPSMsgInfo getGpsMsgInfo(String gbId);
+
     List<GPSMsgInfo> getAllGpsMsgInfo();
 
     MediaInfo getStreamInfo(String app, String streamId, String mediaServerId);

+ 8 - 0
src/main/java/com/genersoft/iot/vmp/utils/JsonUtil.java

@@ -31,4 +31,12 @@ public final class JsonUtil {
         }
         return clazz.cast(jsonObject);
     }
+
+    public static <T> T redisHashJsonToObject(RedisTemplate<Object, Object> redisTemplate, String key, String objKey, Class<T> clazz) {
+        Object jsonObject = redisTemplate.opsForHash().get(key, objKey);
+        if (Objects.isNull(jsonObject)) {
+            return null;
+        }
+        return clazz.cast(jsonObject);
+    }
 }