From 4f2d47385d3535edf73634831c56f7fc18ff3494 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期一, 03 四月 2023 10:26:55 +0800
Subject: [PATCH] 去除redis工具类直接使用RedisTemplate存取数据

---
 src/main/java/com/genersoft/iot/vmp/conf/redis/RedisMsgListenConfig.java                                                           |   68 +
 src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java                                                          |    4 
 src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java                                                              |    9 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/RecordInfoResponseMessageHandler.java |   15 
 src/main/java/com/genersoft/iot/vmp/vmanager/bean/StreamContent.java                                                               |    3 
 src/main/java/com/genersoft/iot/vmp/conf/redis/RedisConfig.java                                                                    |   62 -
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java                                     |   10 
 src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java                                                                     |  883 ---------------------
 src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java                                                           |   33 
 src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java                                                 |   30 
 src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java                                                       |  269 +++---
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java                                         |   20 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/RegisterResponseProcessor.java                            |    2 
 src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil2.java                                                                    |  899 +++++++++++++++++++++
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java                                             |    2 
 src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java                                                       |   79 
 src/main/java/com/genersoft/iot/vmp/utils/JsonUtil.java                                                                            |    8 
 src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisGbPlayMsgListener.java                                                   |   32 
 18 files changed, 1,251 insertions(+), 1,177 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/conf/redis/RedisConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/redis/RedisConfig.java
index a2dca63..b660c83 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/redis/RedisConfig.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/redis/RedisConfig.java
@@ -1,58 +1,31 @@
 package com.genersoft.iot.vmp.conf.redis;
 
 
-import com.genersoft.iot.vmp.common.VideoManagerConstants;
-import com.genersoft.iot.vmp.service.redisMsg.*;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cache.annotation.CachingConfigurerSupport;
+import com.alibaba.fastjson2.support.spring.data.redis.GenericFastJsonRedisSerializer;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.core.annotation.Order;
 import org.springframework.data.redis.connection.RedisConnectionFactory;
 import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.listener.PatternTopic;
-import org.springframework.data.redis.listener.RedisMessageListenerContainer;
 import org.springframework.data.redis.serializer.StringRedisSerializer;
-
-import com.genersoft.iot.vmp.utils.redis.FastJsonRedisSerializer;
 
 
 /**
- * @description:Redis涓棿浠堕厤缃被锛屼娇鐢╯pring-data-redis闆嗘垚锛岃嚜鍔ㄤ粠application.yml涓姞杞絩edis閰嶇疆
- * @author: swwheihei
- * @date: 2019骞�5鏈�30鏃� 涓婂崍10:58:25
+ * Redis涓棿浠堕厤缃被锛屼娇鐢╯pring-data-redis闆嗘垚锛岃嚜鍔ㄤ粠application.yml涓姞杞絩edis閰嶇疆
+ * swwheihei
+ * 2019骞�5鏈�30鏃� 涓婂崍10:58:25
  * 
  */
 @Configuration
 @Order(value=1)
-public class RedisConfig extends CachingConfigurerSupport {
+public class RedisConfig {
 
-	@Autowired
-	private RedisGpsMsgListener redisGPSMsgListener;
-
-	@Autowired
-	private RedisAlarmMsgListener redisAlarmMsgListener;
-
-	@Autowired
-	private RedisStreamMsgListener redisStreamMsgListener;
-
-	@Autowired
-	private RedisGbPlayMsgListener redisGbPlayMsgListener;
-
-	@Autowired
-	private RedisPushStreamStatusMsgListener redisPushStreamStatusMsgListener;
-
-	@Autowired
-	private RedisPushStreamStatusListMsgListener redisPushStreamListMsgListener;
-
-	@Autowired
-	private RedisPushStreamResponseListener redisPushStreamResponseListener;
 
 	@Bean
 	public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
 		RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
 		// 浣跨敤fastJson搴忓垪鍖�
-		FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class);
+		GenericFastJsonRedisSerializer fastJsonRedisSerializer = new GenericFastJsonRedisSerializer();
 		// value鍊肩殑搴忓垪鍖栭噰鐢╢astJsonRedisSerializer
 		redisTemplate.setValueSerializer(fastJsonRedisSerializer);
 		redisTemplate.setHashValueSerializer(fastJsonRedisSerializer);
@@ -63,27 +36,4 @@
 		redisTemplate.setConnectionFactory(redisConnectionFactory);
 		return redisTemplate;
 	}
-
-
-	/**
-	 * redis娑堟伅鐩戝惉鍣ㄥ鍣� 鍙互娣诲姞澶氫釜鐩戝惉涓嶅悓璇濋鐨剅edis鐩戝惉鍣紝鍙渶瑕佹妸娑堟伅鐩戝惉鍣ㄥ拰鐩稿簲鐨勬秷鎭闃呭鐞嗗櫒缁戝畾锛岃娑堟伅鐩戝惉鍣�
-	 * 閫氳繃鍙嶅皠鎶�鏈皟鐢ㄦ秷鎭闃呭鐞嗗櫒鐨勭浉鍏虫柟娉曡繘琛屼竴浜涗笟鍔″鐞�
-	 * 
-	 * @param connectionFactory
-	 * @return
-	 */
-	@Bean
-	RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
-
-        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
-        container.setConnectionFactory(connectionFactory);
-		container.addMessageListener(redisGPSMsgListener, new PatternTopic(VideoManagerConstants.VM_MSG_GPS));
-		container.addMessageListener(redisAlarmMsgListener, new PatternTopic(VideoManagerConstants.VM_MSG_SUBSCRIBE_ALARM_RECEIVE));
-		container.addMessageListener(redisStreamMsgListener, new PatternTopic(VideoManagerConstants.WVP_MSG_STREAM_CHANGE_PREFIX + "PUSH"));
-		container.addMessageListener(redisGbPlayMsgListener, new PatternTopic(RedisGbPlayMsgListener.WVP_PUSH_STREAM_KEY));
-		container.addMessageListener(redisPushStreamStatusMsgListener, new PatternTopic(VideoManagerConstants.VM_MSG_PUSH_STREAM_STATUS_CHANGE));
-		container.addMessageListener(redisPushStreamListMsgListener, new PatternTopic(VideoManagerConstants.VM_MSG_PUSH_STREAM_LIST_CHANGE));
-		container.addMessageListener(redisPushStreamResponseListener, new PatternTopic(VideoManagerConstants.VM_MSG_STREAM_PUSH_RESPONSE));
-        return container;
-    }
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/redis/RedisMsgListenConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/redis/RedisMsgListenConfig.java
new file mode 100644
index 0000000..9f48426
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/conf/redis/RedisMsgListenConfig.java
@@ -0,0 +1,68 @@
+package com.genersoft.iot.vmp.conf.redis;
+
+
+import com.genersoft.iot.vmp.common.VideoManagerConstants;
+import com.genersoft.iot.vmp.service.redisMsg.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.annotation.Order;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.listener.PatternTopic;
+import org.springframework.data.redis.listener.RedisMessageListenerContainer;
+
+
+/**
+ * @description:Redis涓棿浠堕厤缃被锛屼娇鐢╯pring-data-redis闆嗘垚锛岃嚜鍔ㄤ粠application.yml涓姞杞絩edis閰嶇疆
+ * @author: swwheihei
+ * @date: 2019骞�5鏈�30鏃� 涓婂崍10:58:25
+ * 
+ */
+@Configuration
+@Order(value=1)
+public class RedisMsgListenConfig {
+
+	@Autowired
+	private RedisGpsMsgListener redisGPSMsgListener;
+
+	@Autowired
+	private RedisAlarmMsgListener redisAlarmMsgListener;
+
+	@Autowired
+	private RedisStreamMsgListener redisStreamMsgListener;
+
+	@Autowired
+	private RedisGbPlayMsgListener redisGbPlayMsgListener;
+
+	@Autowired
+	private RedisPushStreamStatusMsgListener redisPushStreamStatusMsgListener;
+
+	@Autowired
+	private RedisPushStreamStatusListMsgListener redisPushStreamListMsgListener;
+
+	@Autowired
+	private RedisPushStreamResponseListener redisPushStreamResponseListener;
+
+
+	/**
+	 * redis娑堟伅鐩戝惉鍣ㄥ鍣� 鍙互娣诲姞澶氫釜鐩戝惉涓嶅悓璇濋鐨剅edis鐩戝惉鍣紝鍙渶瑕佹妸娑堟伅鐩戝惉鍣ㄥ拰鐩稿簲鐨勬秷鎭闃呭鐞嗗櫒缁戝畾锛岃娑堟伅鐩戝惉鍣�
+	 * 閫氳繃鍙嶅皠鎶�鏈皟鐢ㄦ秷鎭闃呭鐞嗗櫒鐨勭浉鍏虫柟娉曡繘琛屼竴浜涗笟鍔″鐞�
+	 * 
+	 * @param connectionFactory
+	 * @return
+	 */
+	@Bean
+	RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
+
+        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
+        container.setConnectionFactory(connectionFactory);
+		container.addMessageListener(redisGPSMsgListener, new PatternTopic(VideoManagerConstants.VM_MSG_GPS));
+		container.addMessageListener(redisAlarmMsgListener, new PatternTopic(VideoManagerConstants.VM_MSG_SUBSCRIBE_ALARM_RECEIVE));
+		container.addMessageListener(redisStreamMsgListener, new PatternTopic(VideoManagerConstants.WVP_MSG_STREAM_CHANGE_PREFIX + "PUSH"));
+		container.addMessageListener(redisGbPlayMsgListener, new PatternTopic(RedisGbPlayMsgListener.WVP_PUSH_STREAM_KEY));
+		container.addMessageListener(redisPushStreamStatusMsgListener, new PatternTopic(VideoManagerConstants.VM_MSG_PUSH_STREAM_STATUS_CHANGE));
+		container.addMessageListener(redisPushStreamListMsgListener, new PatternTopic(VideoManagerConstants.VM_MSG_PUSH_STREAM_LIST_CHANGE));
+		container.addMessageListener(redisPushStreamResponseListener, new PatternTopic(VideoManagerConstants.VM_MSG_STREAM_PUSH_RESPONSE));
+        return container;
+    }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java
index a905e44..96ae6b9 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java
@@ -72,22 +72,23 @@
      **/
     @Override
     public void configure(WebSecurity web) {
-
-        ArrayList<String> matchers = new ArrayList<>();
-        matchers.add("/");
-        matchers.add("/#/**");
-        matchers.add("/static/**");
-        matchers.add("/index.html");
-        matchers.add("/doc.html");
-        matchers.add("/webjars/**");
-        matchers.add("/swagger-resources/**");
-        matchers.add("/v3/api-docs/**");
-        matchers.add("/js/**");
-        matchers.add("/api/device/query/snap/**");
-        matchers.add("/record_proxy/*/**");
-        matchers.addAll(userSetting.getInterfaceAuthenticationExcludes());
-        // 鍙互鐩存帴璁块棶鐨勯潤鎬佹暟鎹�
-        web.ignoring().antMatchers(matchers.toArray(new String[0]));
+        if (userSetting.isInterfaceAuthentication()) {
+            ArrayList<String> matchers = new ArrayList<>();
+            matchers.add("/");
+            matchers.add("/#/**");
+            matchers.add("/static/**");
+            matchers.add("/index.html");
+            matchers.add("/doc.html");
+            matchers.add("/webjars/**");
+            matchers.add("/swagger-resources/**");
+            matchers.add("/v3/api-docs/**");
+            matchers.add("/js/**");
+            matchers.add("/api/device/query/snap/**");
+            matchers.add("/record_proxy/*/**");
+            matchers.addAll(userSetting.getInterfaceAuthenticationExcludes());
+            // 鍙互鐩存帴璁块棶鐨勯潤鎬佹暟鎹�
+            web.ignoring().antMatchers(matchers.toArray(new String[0]));
+        }
     }
 
     /**
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java b/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java
index f90de88..dabfdff 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java
@@ -8,22 +8,24 @@
 import com.genersoft.iot.vmp.utils.redis.RedisUtil;
 import gov.nist.javax.sip.message.SIPResponse;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 import org.springframework.util.ObjectUtils;
 
 import java.util.ArrayList;
 import java.util.List;
 
-/**    
- * @description:瑙嗛娴乻ession绠$悊鍣紝绠$悊瑙嗛棰勮銆侀瑙堝洖鏀剧殑閫氫俊鍙ユ焺 
- * @author: swwheihei
- * @date:   2020骞�5鏈�13鏃� 涓嬪崍4:03:02     
+/**
+ * 瑙嗛娴乻ession绠$悊鍣紝绠$悊瑙嗛棰勮銆侀瑙堝洖鏀剧殑閫氫俊鍙ユ焺
  */
 @Component
 public class VideoStreamSessionManager {
 
 	@Autowired
 	private UserSetting userSetting;
+
+	@Autowired
+	private RedisTemplate<Object, Object> redisTemplate;
 
 	public enum SessionType {
 		play,
@@ -52,7 +54,7 @@
 		ssrcTransaction.setMediaServerId(mediaServerId);
 		ssrcTransaction.setType(type);
 
-		RedisUtil.set(VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + userSetting.getServerId()
+		redisTemplate.opsForValue().set(VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + userSetting.getServerId()
 				+ "_" +  deviceId + "_" + channelId + "_" + callId + "_" + stream, ssrcTransaction);
 	}
 
@@ -71,11 +73,11 @@
 			stream ="*";
 		}
 		String key = VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + userSetting.getServerId() + "_" + deviceId + "_" + channelId + "_" + callId+ "_" + stream;
-		List<Object> scanResult = RedisUtil.scan(key);
+		List<Object> scanResult = RedisUtil.scan(redisTemplate, key);
 		if (scanResult.size() == 0) {
 			return null;
 		}
-		return (SsrcTransaction)RedisUtil.get((String) scanResult.get(0));
+		return (SsrcTransaction)redisTemplate.opsForValue().get(scanResult.get(0));
 	}
 
 	public List<SsrcTransaction> getSsrcTransactionForAll(String deviceId, String channelId, String callId, String stream){
@@ -92,13 +94,13 @@
 			stream ="*";
 		}
 		String key = VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + userSetting.getServerId() + "_" + deviceId + "_" + channelId + "_" + callId+ "_" + stream;
-		List<Object> scanResult = RedisUtil.scan(key);
+		List<Object> scanResult = RedisUtil.scan(redisTemplate, key);
 		if (scanResult.size() == 0) {
 			return null;
 		}
 		List<SsrcTransaction> result = new ArrayList<>();
 		for (Object keyObj : scanResult) {
-			result.add((SsrcTransaction)RedisUtil.get((String) keyObj));
+			result.add((SsrcTransaction)redisTemplate.opsForValue().get(keyObj));
 		}
 		return result;
 	}
@@ -124,17 +126,17 @@
 		if (ssrcTransaction == null) {
 			return;
 		}
-		RedisUtil.del(VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + userSetting.getServerId() + "_"
+		redisTemplate.delete(VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + userSetting.getServerId() + "_"
 				+  deviceId + "_" + channelId + "_" + ssrcTransaction.getCallId() + "_" + ssrcTransaction.getStream());
 	}
 
 
 	public List<SsrcTransaction> getAllSsrc() {
-		List<Object> ssrcTransactionKeys = RedisUtil.scan(String.format("%s_*_*_*_*", VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX+ userSetting.getServerId()));
+		List<Object> ssrcTransactionKeys = RedisUtil.scan(redisTemplate, String.format("%s_*_*_*_*", VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX+ userSetting.getServerId()));
 		List<SsrcTransaction> result= new ArrayList<>();
-		for (int i = 0; i < ssrcTransactionKeys.size(); i++) {
-			String key = (String)ssrcTransactionKeys.get(i);
-			SsrcTransaction ssrcTransaction = JsonUtil.redisJsonToObject(key, SsrcTransaction.class);
+		for (Object ssrcTransactionKey : ssrcTransactionKeys) {
+			String key = (String) ssrcTransactionKey;
+			SsrcTransaction ssrcTransaction = JsonUtil.redisJsonToObject(redisTemplate, key, SsrcTransaction.class);
 			result.add(ssrcTransaction);
 		}
 		return result;
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java
index 08d5b2e..acfb880 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java
@@ -20,7 +20,7 @@
     void register(ParentPlatform parentPlatform, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) throws InvalidArgumentException, ParseException, SipException;
 
     void register(ParentPlatform parentPlatform, SipTransactionInfo sipTransactionInfo, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) throws InvalidArgumentException, ParseException, SipException;
-    void register(ParentPlatform parentPlatform, SipTransactionInfo sipTransactionInfo, WWWAuthenticateHeader www, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent, boolean registerAgain, boolean isRegister) throws SipException, InvalidArgumentException, ParseException;
+    void register(ParentPlatform parentPlatform, SipTransactionInfo sipTransactionInfo, WWWAuthenticateHeader www, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent, boolean isRegister) throws SipException, InvalidArgumentException, ParseException;
 
     /**
      * 鍚戜笂绾у钩鍙版敞閿�
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java
index 2486a52..f14d0d1 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java
@@ -45,7 +45,7 @@
 	@Autowired
 	private IRedisCatchStorage redisCatchStorage;
 
-	public Request createRegisterRequest(@NotNull ParentPlatform parentPlatform, long CSeq, String fromTag, String toTag, CallIdHeader callIdHeader, boolean isRegister) throws ParseException, InvalidArgumentException, PeerUnavailableException {
+	public Request createRegisterRequest(@NotNull ParentPlatform parentPlatform, long CSeq, String fromTag, String toTag, CallIdHeader callIdHeader, int expires) throws ParseException, InvalidArgumentException, PeerUnavailableException {
 		Request request = null;
 		String sipAddress = parentPlatform.getDeviceIp() + ":" + parentPlatform.getDevicePort();
 		//璇锋眰琛�
@@ -78,8 +78,8 @@
 				.createSipURI(parentPlatform.getDeviceGBId(), sipAddress));
 		request.addHeader(sipLayer.getSipFactory().createHeaderFactory().createContactHeader(concatAddress));
 
-		ExpiresHeader expires = sipLayer.getSipFactory().createHeaderFactory().createExpiresHeader(isRegister ? parentPlatform.getExpires() : 0);
-		request.addHeader(expires);
+		ExpiresHeader expiresHeader = sipLayer.getSipFactory().createHeaderFactory().createExpiresHeader(expires);
+		request.addHeader(expiresHeader);
 
 		request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil));
 
@@ -87,10 +87,10 @@
 	}
 
 	public Request createRegisterRequest(@NotNull ParentPlatform parentPlatform, String fromTag, String toTag,
-										 WWWAuthenticateHeader www , CallIdHeader callIdHeader, boolean isRegister) throws ParseException, PeerUnavailableException, InvalidArgumentException {
+										 WWWAuthenticateHeader www , CallIdHeader callIdHeader, int expires) throws ParseException, PeerUnavailableException, InvalidArgumentException {
 
 
-		Request registerRequest = createRegisterRequest(parentPlatform, redisCatchStorage.getCSEQ(), fromTag, toTag, callIdHeader, isRegister);
+		Request registerRequest = createRegisterRequest(parentPlatform, redisCatchStorage.getCSEQ(), fromTag, toTag, callIdHeader, expires);
 		SipURI requestURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(parentPlatform.getServerGBId(), parentPlatform.getServerIP() + ":" + parentPlatform.getServerPort());
 		if (www == null) {
 			AuthorizationHeader authorizationHeader = sipLayer.getSipFactory().createHeaderFactory().createAuthorizationHeader("Digest");
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
index af31818..7f0499a 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
@@ -71,23 +71,23 @@
 
     @Override
     public void register(ParentPlatform parentPlatform, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) throws InvalidArgumentException, ParseException, SipException {
-        register(parentPlatform, null, null, errorEvent, okEvent, false, true);
+        register(parentPlatform, null, null, errorEvent, okEvent, true);
     }
 
     @Override
     public void register(ParentPlatform parentPlatform, SipTransactionInfo sipTransactionInfo, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) throws InvalidArgumentException, ParseException, SipException {
 
-        register(parentPlatform, sipTransactionInfo, null, errorEvent, okEvent, false, true);
+        register(parentPlatform, sipTransactionInfo, null, errorEvent, okEvent, true);
     }
 
     @Override
     public void unregister(ParentPlatform parentPlatform, SipTransactionInfo sipTransactionInfo, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) throws InvalidArgumentException, ParseException, SipException {
-        register(parentPlatform, sipTransactionInfo, null, errorEvent, okEvent, false, false);
+        register(parentPlatform, sipTransactionInfo, null, errorEvent, okEvent, false);
     }
 
     @Override
     public void register(ParentPlatform parentPlatform, @Nullable SipTransactionInfo sipTransactionInfo, @Nullable WWWAuthenticateHeader www,
-                            SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent, boolean registerAgain, boolean isRegister) throws SipException, InvalidArgumentException, ParseException {
+                            SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent, boolean isRegister) throws SipException, InvalidArgumentException, ParseException {
             Request request;
 
             CallIdHeader callIdHeader = sipSender.getNewCallIdHeader(parentPlatform.getDeviceIp(),parentPlatform.getTransport());
@@ -105,10 +105,10 @@
                 }
             }
 
-            if (!registerAgain ) {
+            if (www == null ) {
                 request = headerProviderPlatformProvider.createRegisterRequest(parentPlatform,
                         redisCatchStorage.getCSEQ(), fromTag,
-                        toTag, callIdHeader, isRegister);
+                        toTag, callIdHeader, isRegister? parentPlatform.getExpires() : 0);
                 // 灏� callid 鍐欏叆缂撳瓨锛� 绛夋敞鍐屾垚鍔熷彲浠ユ洿鏂扮姸鎬�
                 String callIdFromHeader = callIdHeader.getCallId();
                 redisCatchStorage.updatePlatformRegisterInfo(callIdFromHeader, PlatformRegisterInfo.getInstance(parentPlatform.getServerGBId(), isRegister));
@@ -126,7 +126,7 @@
                 });
 
             }else {
-                request = headerProviderPlatformProvider.createRegisterRequest(parentPlatform, fromTag, toTag, www, callIdHeader, isRegister);
+                request = headerProviderPlatformProvider.createRegisterRequest(parentPlatform, fromTag, toTag, www, callIdHeader, isRegister? parentPlatform.getExpires() : 0);
             }
 
             sipSender.transmitRequest(parentPlatform.getDeviceIp(), request, null, okEvent);
@@ -497,10 +497,10 @@
     private void sendNotify(ParentPlatform parentPlatform, String catalogXmlContent,
                                    SubscribeInfo subscribeInfo, SipSubscribe.Event errorEvent,  SipSubscribe.Event okEvent )
             throws SipException, ParseException, InvalidArgumentException {
-		MessageFactoryImpl messageFactory = (MessageFactoryImpl) sipLayer.getSipFactory().createMessageFactory();
+        MessageFactoryImpl messageFactory = (MessageFactoryImpl) sipLayer.getSipFactory().createMessageFactory();
         String characterSet = parentPlatform.getCharacterSet();
- 		// 璁剧疆缂栫爜锛� 闃叉涓枃涔辩爜
-		messageFactory.setDefaultContentEncodingCharset(characterSet);
+        // 璁剧疆缂栫爜锛� 闃叉涓枃涔辩爜
+        messageFactory.setDefaultContentEncodingCharset(characterSet);
 
         SIPRequest notifyRequest = headerProviderPlatformProvider.createNotifyRequest(parentPlatform, catalogXmlContent, subscribeInfo);
 
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/RecordInfoResponseMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/RecordInfoResponseMessageHandler.java
index a667c67..36e5df2 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/RecordInfoResponseMessageHandler.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/RecordInfoResponseMessageHandler.java
@@ -10,7 +10,6 @@
 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler;
 import com.genersoft.iot.vmp.utils.DateUtil;
 import com.genersoft.iot.vmp.utils.UJson;
-import com.genersoft.iot.vmp.utils.redis.RedisUtil;
 import gov.nist.javax.sip.message.SIPRequest;
 import org.dom4j.Element;
 import org.slf4j.Logger;
@@ -18,6 +17,7 @@
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Component;
 import org.springframework.util.ObjectUtils;
@@ -29,6 +29,7 @@
 import java.text.ParseException;
 import java.util.*;
 import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 import static com.genersoft.iot.vmp.gb28181.utils.XmlUtil.getText;
@@ -56,6 +57,9 @@
     @Qualifier("taskExecutor")
     @Autowired
     private ThreadPoolTaskExecutor taskExecutor;
+
+    @Autowired
+    private RedisTemplate<Object, Object> redisTemplate;
 
     private Long recordInfoTtl = 1800L;
 
@@ -130,10 +134,11 @@
                                 .collect(Collectors.toMap(record -> record.getStartTime()+ record.getEndTime(), UJson::writeJson));
                         // 鑾峰彇浠诲姟缁撴灉鏁版嵁
                         String resKey = VideoManagerConstants.REDIS_RECORD_INFO_RES_PRE + channelId + sn;
-                        RedisUtil.hmset(resKey, map, recordInfoTtl);
+                        redisTemplate.opsForHash().putAll(resKey, map);
+                        redisTemplate.expire(resKey, recordInfoTtl, TimeUnit.SECONDS);
                         String resCountKey = VideoManagerConstants.REDIS_RECORD_INFO_RES_COUNT_PRE + channelId + sn;
-                        long incr = RedisUtil.incr(resCountKey, map.size());
-                        RedisUtil.expire(resCountKey, recordInfoTtl);
+                        long incr = redisTemplate.opsForValue().increment(resCountKey, map.size());
+                        redisTemplate.expire(resCountKey, recordInfoTtl, TimeUnit.SECONDS);
                         recordInfo.setRecordList(recordList);
                         recordInfo.setCount(Math.toIntExact(incr));
                         eventPublisher.recordEndEventPush(recordInfo);
@@ -141,7 +146,7 @@
                             return;
                         }
                         // 宸叉帴鏀跺畬鎴�
-                        List<RecordItem> resList = RedisUtil.hmget(resKey).values().stream().map(e -> UJson.readJson(e.toString(), RecordItem.class)).collect(Collectors.toList());
+                        List<RecordItem> resList = redisTemplate.opsForHash().entries(resKey).values().stream().map(e -> UJson.readJson(e.toString(), RecordItem.class)).collect(Collectors.toList());
                         if (resList.size() < sumNum) {
                             return;
                         }
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/RegisterResponseProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/RegisterResponseProcessor.java
index 0294ba2..ff1ccc6 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/RegisterResponseProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/RegisterResponseProcessor.java
@@ -92,7 +92,7 @@
 			WWWAuthenticateHeader www = (WWWAuthenticateHeader)response.getHeader(WWWAuthenticateHeader.NAME);
 			SipTransactionInfo sipTransactionInfo = new SipTransactionInfo(response);
 			try {
-				sipCommanderForPlatform.register(parentPlatform, sipTransactionInfo, www, null, null, true, platformRegisterInfo.isRegister());
+				sipCommanderForPlatform.register(parentPlatform, sipTransactionInfo, www, null, null, platformRegisterInfo.isRegister());
 			} catch (SipException | InvalidArgumentException | ParseException e) {
 				logger.error("[鍛戒护鍙戦�佸け璐 鍥芥爣绾ц仈 鍐嶆娉ㄥ唽: {}", e.getMessage());
 			}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
index e6bdb92..208fa9d 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
@@ -10,7 +10,6 @@
 import com.genersoft.iot.vmp.conf.exception.ControllerException;
 import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
 import com.genersoft.iot.vmp.gb28181.session.SsrcConfig;
-import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
 import com.genersoft.iot.vmp.media.zlm.AssistRESTfulUtils;
 import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
 import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
@@ -33,6 +32,7 @@
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.jdbc.datasource.DataSourceTransactionManager;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.TransactionDefinition;
@@ -75,13 +75,11 @@
     private MediaServerMapper mediaServerMapper;
 
     @Autowired
-    DataSourceTransactionManager dataSourceTransactionManager;
+    private DataSourceTransactionManager dataSourceTransactionManager;
 
     @Autowired
-    TransactionDefinition transactionDefinition;
+    private TransactionDefinition transactionDefinition;
 
-    @Autowired
-    private VideoStreamSessionManager streamSession;
 
     @Autowired
     private ZLMRTPServerFactory zlmrtpServerFactory;
@@ -94,6 +92,9 @@
 
     @Autowired
     private IRedisCatchStorage redisCatchStorage;
+
+    @Autowired
+    private RedisTemplate<Object, Object> redisTemplate;
 
     /**
      * 鍒濆鍖�
@@ -109,12 +110,13 @@
             if (mediaServerItem.getSsrcConfig() == null) {
                 SsrcConfig ssrcConfig = new SsrcConfig(mediaServerItem.getId(), null, sipConfig.getDomain());
                 mediaServerItem.setSsrcConfig(ssrcConfig);
-                RedisUtil.set(VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerItem.getId(), mediaServerItem);
+                redisTemplate.opsForValue().set(VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerItem.getId(), mediaServerItem);
             }
             // 鏌ヨredis鏄惁瀛樺湪姝ediaServer
             String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerItem.getId();
-            if (!RedisUtil.hasKey(key)) {
-                RedisUtil.set(key, mediaServerItem);
+            Boolean hasKey = redisTemplate.hasKey(key);
+            if (hasKey != null && ! hasKey) {
+                redisTemplate.opsForValue().set(key, mediaServerItem);
             }
 
         }
@@ -159,7 +161,7 @@
             } else {
                 rtpServerPort = mediaServerItem.getRtpProxyPort();
             }
-            RedisUtil.set(key, mediaServerItem);
+            redisTemplate.opsForValue().set(key, mediaServerItem);
             return new SSRCInfo(rtpServerPort, ssrc, streamId);
         }
     }
@@ -193,7 +195,7 @@
         ssrcConfig.releaseSsrc(ssrc);
         mediaServerItem.setSsrcConfig(ssrcConfig);
         String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerItem.getId();
-        RedisUtil.set(key, mediaServerItem);
+        redisTemplate.opsForValue().set(key, mediaServerItem);
     }
 
     /**
@@ -202,7 +204,7 @@
     @Override
     public void clearRTPServer(MediaServerItem mediaServerItem) {
         mediaServerItem.setSsrcConfig(new SsrcConfig(mediaServerItem.getId(), null, sipConfig.getDomain()));
-        RedisUtil.zAdd(VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId(), mediaServerItem.getId(), 0);
+        redisTemplate.opsForZSet().add(VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId(), mediaServerItem.getId(), 0);
 
     }
 
@@ -224,22 +226,22 @@
             );
         }
         String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerItemInDataBase.getId();
-        RedisUtil.set(key, mediaServerItemInDataBase);
+        redisTemplate.opsForValue().set(key, mediaServerItemInDataBase);
     }
 
     @Override
     public List<MediaServerItem> getAll() {
         List<MediaServerItem> result = new ArrayList<>();
-        List<Object> mediaServerKeys = RedisUtil.scan(String.format("%S*", VideoManagerConstants.MEDIA_SERVER_PREFIX+ userSetting.getServerId() + "_" ));
+        List<Object> mediaServerKeys = RedisUtil.scan(redisTemplate, String.format("%S*", VideoManagerConstants.MEDIA_SERVER_PREFIX+ userSetting.getServerId() + "_" ));
         String onlineKey = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId();
         for (Object mediaServerKey : mediaServerKeys) {
             String key = (String) mediaServerKey;
-            MediaServerItem mediaServerItem = JsonUtil.redisJsonToObject(key, MediaServerItem.class);
+            MediaServerItem mediaServerItem = JsonUtil.redisJsonToObject(redisTemplate, key, MediaServerItem.class);
             if (Objects.isNull(mediaServerItem)) {
                 continue;
             }
             // 妫�鏌ョ姸鎬�
-            Double aDouble = RedisUtil.zScore(onlineKey, mediaServerItem.getId());
+            Double aDouble = redisTemplate.opsForZSet().score(onlineKey, mediaServerItem.getId());
             if (aDouble != null) {
                 mediaServerItem.setStatus(true);
             }
@@ -265,13 +267,14 @@
     @Override
     public List<MediaServerItem> getAllOnline() {
         String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId();
-        Set<String> mediaServerIdSet = RedisUtil.zRevRange(key, 0, -1);
+        Set<Object> mediaServerIdSet = redisTemplate.opsForZSet().reverseRange(key, 0, -1);
 
         List<MediaServerItem> result = new ArrayList<>();
         if (mediaServerIdSet != null && mediaServerIdSet.size() > 0) {
-            for (String mediaServerId : mediaServerIdSet) {
-                String serverKey = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerId;
-                result.add((MediaServerItem) RedisUtil.get(serverKey));
+            for (Object mediaServerId : mediaServerIdSet) {
+                String mediaServerIdStr = (String) mediaServerId;
+                String serverKey = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerIdStr;
+                result.add((MediaServerItem) redisTemplate.opsForValue().get(serverKey));
             }
         }
         Collections.reverse(result);
@@ -289,7 +292,7 @@
             return null;
         }
         String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerId;
-        return JsonUtil.redisJsonToObject(key, MediaServerItem.class);
+        return JsonUtil.redisJsonToObject(redisTemplate, key, MediaServerItem.class);
     }
 
     @Override
@@ -301,7 +304,7 @@
     @Override
     public void clearMediaServerForOnline() {
         String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId();
-        RedisUtil.del(key);
+        redisTemplate.delete(key);
     }
 
     @Override
@@ -401,16 +404,16 @@
         }
         mediaServerMapper.update(serverItem);
         String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + zlmServerConfig.getGeneralMediaServerId();
-        if (RedisUtil.get(key) == null) {
+        if (redisTemplate.opsForValue().get(key) == null) {
             SsrcConfig ssrcConfig = new SsrcConfig(zlmServerConfig.getGeneralMediaServerId(), null, sipConfig.getDomain());
             serverItem.setSsrcConfig(ssrcConfig);
         }else {
-            MediaServerItem mediaServerItemInRedis = JsonUtil.redisJsonToObject(key, MediaServerItem.class);
+            MediaServerItem mediaServerItemInRedis = JsonUtil.redisJsonToObject(redisTemplate, key, MediaServerItem.class);
             if (Objects.nonNull(mediaServerItemInRedis)) {
                 serverItem.setSsrcConfig(mediaServerItemInRedis.getSsrcConfig());
             }
         }
-        RedisUtil.set(key, serverItem);
+        redisTemplate.opsForValue().set(key, serverItem);
         resetOnlineServerItem(serverItem);
 
 
@@ -473,15 +476,15 @@
         // 鏇存柊缂撳瓨
         String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId();
         // 浣跨敤zset鐨勫垎鏁颁綔涓哄綋鍓嶅苟鍙戦噺锛� 榛樿鍊艰缃负0
-        if (RedisUtil.zScore(key, serverItem.getId()) == null) {  // 涓嶅瓨鍦ㄥ垯璁剧疆榛樿鍊� 宸插瓨鍦ㄥ垯閲嶇疆
-            RedisUtil.zAdd(key, serverItem.getId(), 0L);
+        if (redisTemplate.opsForZSet().score(key, serverItem.getId()) == null) {  // 涓嶅瓨鍦ㄥ垯璁剧疆榛樿鍊� 宸插瓨鍦ㄥ垯閲嶇疆
+            redisTemplate.opsForZSet().add(key, serverItem.getId(), 0L);
             // 鏌ヨ鏈嶅姟娴佹暟閲�
             zlmresTfulUtils.getMediaList(serverItem, null, null, "rtsp",(mediaList ->{
                 Integer code = mediaList.getInteger("code");
                 if (code == 0) {
                     JSONArray data = mediaList.getJSONArray("data");
                     if (data != null) {
-                        RedisUtil.zAdd(key, serverItem.getId(), data.size());
+                        redisTemplate.opsForZSet().add(key, serverItem.getId(), data.size());
                     }
                 }
             }));
@@ -497,14 +500,14 @@
             return;
         }
         String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId();
-        RedisUtil.zIncrScore(key, mediaServerId, 1);
+        redisTemplate.opsForZSet().incrementScore(key, mediaServerId, 1);
 
     }
 
     @Override
     public void removeCount(String mediaServerId) {
         String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId();
-        RedisUtil.zIncrScore(key, mediaServerId, - 1);
+        redisTemplate.opsForZSet().incrementScore(key, mediaServerId, - 1);
     }
 
     /**
@@ -514,16 +517,14 @@
     @Override
     public MediaServerItem getMediaServerForMinimumLoad(Boolean hasAssist) {
         String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId();
-
-        if (RedisUtil.zSize(key)  == null || RedisUtil.zSize(key) == 0) {
-            if (RedisUtil.zSize(key)  == null || RedisUtil.zSize(key) == 0) {
-                logger.info("鑾峰彇璐熻浇鏈�浣庣殑鑺傜偣鏃舵棤鍦ㄧ嚎鑺傜偣");
-                return null;
-            }
+        Long size = redisTemplate.opsForZSet().zCard(key);
+        if (size  == null || size == 0) {
+            logger.info("鑾峰彇璐熻浇鏈�浣庣殑鑺傜偣鏃舵棤鍦ㄧ嚎鑺傜偣");
+            return null;
         }
 
         // 鑾峰彇鍒嗘暟鏈�浣庣殑锛屽強骞跺彂鏈�浣庣殑
-        Set<Object> objects = RedisUtil.zRange(key, 0, -1);
+        Set<Object> objects = redisTemplate.opsForZSet().range(key, 0, -1);
         ArrayList<Object> mediaServerObjectS = new ArrayList<>(objects);
         MediaServerItem mediaServerItem = null;
         if (hasAssist == null) {
@@ -686,9 +687,9 @@
 
     @Override
     public void delete(String id) {
-        RedisUtil.zRemove(VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId(), id);
+        redisTemplate.opsForZSet().remove(VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId(), id);
         String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + id;
-        RedisUtil.del(key);
+        redisTemplate.delete(key);
     }
     @Override
     public void deleteDb(String id){
@@ -711,7 +712,7 @@
             SsrcConfig ssrcConfig = new SsrcConfig(mediaServerItem.getId(), null, sipConfig.getDomain());
             mediaServerItem.setSsrcConfig(ssrcConfig);
             String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerItem.getId();
-            RedisUtil.set(key, mediaServerItem);
+            redisTemplate.opsForValue().set(key, mediaServerItem);
             clearRTPServer(mediaServerItem);
         }
         final String zlmKeepaliveKey = zlmKeepaliveKeyPrefix + mediaServerItem.getId();
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java
index a173557..d05626a 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java
@@ -146,7 +146,7 @@
         // 娉ㄩ攢鏃х殑
         try {
             if (parentPlatformOld.isStatus()) {
-                logger.info("淇濆瓨骞冲彴{}鏃跺彂鐜版晳骞冲彴鍦ㄧ嚎锛屽彂閫佹敞閿�鍛戒护", parentPlatform.getDeviceGBId());
+                logger.info("淇濆瓨骞冲彴{}鏃跺彂鐜版晳骞冲彴鍦ㄧ嚎锛屽彂閫佹敞閿�鍛戒护", parentPlatformOld.getServerGBId());
                 commanderForPlatform.unregister(parentPlatformOld, parentPlatformCatchOld.getSipTransactionInfo(), null, eventResult -> {
                     logger.info("[鍥芥爣绾ц仈] 娉ㄩ攢鎴愬姛锛� 骞冲彴锛歿}", parentPlatformOld.getServerGBId());
                 });
@@ -253,7 +253,7 @@
                                 // 蹇冭烦鎴愬姛
                                 // 娓呯┖涔嬪墠鐨勫績璺宠秴鏃惰鏁�
                                 ParentPlatformCatch platformCatch = redisCatchStorage.queryPlatformCatchInfo(parentPlatform.getServerGBId());
-                                if (platformCatch.getKeepAliveReply() > 0) {
+                                if (platformCatch != null && platformCatch.getKeepAliveReply() > 0) {
                                     platformCatch.setKeepAliveReply(0);
                                     redisCatchStorage.updatePlatformCatchInfo(platformCatch);
                                 }
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
index 0c9243e..462ae3c 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
@@ -33,12 +33,12 @@
 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
 import com.genersoft.iot.vmp.utils.DateUtil;
-import com.genersoft.iot.vmp.utils.redis.RedisUtil;
 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
 import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
@@ -99,6 +99,9 @@
 
     @Autowired
     private ZlmHttpHookSubscribe subscribe;
+
+    @Autowired
+    private RedisTemplate<Object, Object> redisTemplate;
 
 
     @Override
@@ -886,7 +889,7 @@
             throw new ServiceException("streamId涓嶅瓨鍦�");
         }
         streamInfo.setPause(true);
-        RedisUtil.set(key, streamInfo);
+        redisTemplate.opsForValue().set(key, streamInfo);
         MediaServerItem mediaServerItem = mediaServerService.getOne(streamInfo.getMediaServerId());
         if (null == mediaServerItem) {
             logger.warn("mediaServer 涓嶅瓨鍦�!");
@@ -910,7 +913,7 @@
             throw new ServiceException("streamId涓嶅瓨鍦�");
         }
         streamInfo.setPause(false);
-        RedisUtil.set(key, streamInfo);
+        redisTemplate.opsForValue().set(key, streamInfo);
         MediaServerItem mediaServerItem = mediaServerService.getOne(streamInfo.getMediaServerId());
         if (null == mediaServerItem) {
             logger.warn("mediaServer 涓嶅瓨鍦�!");
diff --git a/src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisGbPlayMsgListener.java b/src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisGbPlayMsgListener.java
index c372647..868e861 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisGbPlayMsgListener.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisGbPlayMsgListener.java
@@ -2,19 +2,17 @@
 
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
+import com.genersoft.iot.vmp.common.VideoManagerConstants;
 import com.genersoft.iot.vmp.conf.DynamicTask;
 import com.genersoft.iot.vmp.conf.UserSetting;
 import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem;
-import com.genersoft.iot.vmp.media.zlm.ZlmHttpHookSubscribe;
-import com.genersoft.iot.vmp.media.zlm.ZLMMediaListManager;
 import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
+import com.genersoft.iot.vmp.media.zlm.ZlmHttpHookSubscribe;
 import com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeFactory;
 import com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeForStreamChange;
 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
 import com.genersoft.iot.vmp.service.IMediaServerService;
 import com.genersoft.iot.vmp.service.bean.*;
-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
-import com.genersoft.iot.vmp.utils.redis.RedisUtil;
 import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -22,6 +20,7 @@
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.data.redis.connection.Message;
 import org.springframework.data.redis.connection.MessageListener;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Component;
 
@@ -68,7 +67,7 @@
 
 
     @Autowired
-    private ZLMMediaListManager zlmMediaListManager;
+    private RedisTemplate<Object, Object> redisTemplate;
 
     @Autowired
     private ZLMRTPServerFactory zlmrtpServerFactory;
@@ -76,14 +75,10 @@
     @Autowired
     private IMediaServerService mediaServerService;
 
-    @Autowired
-    private IRedisCatchStorage redisCatchStorage;
 
     @Autowired
     private DynamicTask dynamicTask;
 
-    @Autowired
-    private ZLMMediaListManager mediaListManager;
 
     @Autowired
     private ZlmHttpHookSubscribe subscribe;
@@ -246,7 +241,7 @@
         WvpRedisMsg response = WvpRedisMsg.getResponseInstance(userSetting.getServerId(), toId,
                 WvpRedisMsgCmd.REQUEST_PUSH_STREAM, serial, result);
         JSONObject jsonObject = (JSONObject)JSON.toJSON(response);
-        RedisUtil.convertAndSend(WVP_PUSH_STREAM_KEY, jsonObject);
+        redisTemplate.convertAndSend(WVP_PUSH_STREAM_KEY, jsonObject);
     }
 
     /**
@@ -265,7 +260,7 @@
                     WvpRedisMsgCmd.GET_SEND_ITEM, serial, result);
 
             JSONObject jsonObject = (JSONObject)JSON.toJSON(response);
-            RedisUtil.convertAndSend(WVP_PUSH_STREAM_KEY, jsonObject);
+            redisTemplate.convertAndSend(WVP_PUSH_STREAM_KEY, jsonObject);
             return;
         }
         // 纭畾娴佹槸鍚﹀湪绾�
@@ -288,7 +283,7 @@
                         userSetting.getServerId(), toId, WvpRedisMsgCmd.GET_SEND_ITEM, serial, result
                 );
                 JSONObject jsonObject = (JSONObject)JSON.toJSON(response);
-                RedisUtil.convertAndSend(WVP_PUSH_STREAM_KEY, jsonObject);
+                redisTemplate.convertAndSend(WVP_PUSH_STREAM_KEY, jsonObject);
             }, userSetting.getPlatformPlayTimeout());
 
             // 娣诲姞璁㈤槄
@@ -302,7 +297,12 @@
             MessageForPushChannel messageForPushChannel = MessageForPushChannel.getInstance(1, content.getApp(), content.getStream(),
                     content.getChannelId(), content.getPlatformId(), content.getPlatformName(), content.getServerId(),
                     content.getMediaServerId());
-            redisCatchStorage.sendStreamPushRequestedMsg(messageForPushChannel);
+
+            String key = VideoManagerConstants.VM_MSG_STREAM_PUSH_REQUESTED;
+            logger.info("[redis鍙戦�侀�氱煡] 鎺ㄦ祦琚姹� {}: {}/{}", key, messageForPushChannel.getApp(), messageForPushChannel.getStream());
+            redisTemplate.convertAndSend(key, JSON.toJSON(messageForPushChannel));
+
+//            redisCatchStorage.sendStreamPushRequestedMsg(messageForPushChannel);
 
         }
     }
@@ -327,7 +327,7 @@
                 userSetting.getServerId(), toId, WvpRedisMsgCmd.GET_SEND_ITEM, serial, result
         );
         JSONObject jsonObject = (JSONObject)JSON.toJSON(response);
-        RedisUtil.convertAndSend(WVP_PUSH_STREAM_KEY, jsonObject);
+        redisTemplate.convertAndSend(WVP_PUSH_STREAM_KEY, jsonObject);
     }
 
     /**
@@ -364,7 +364,7 @@
             wvpResult.setMsg("timeout");
             errorCallback.handler(wvpResult);
         }, userSetting.getPlatformPlayTimeout());
-        RedisUtil.convertAndSend(WVP_PUSH_STREAM_KEY, jsonObject);
+        redisTemplate.convertAndSend(WVP_PUSH_STREAM_KEY, jsonObject);
     }
 
     /**
@@ -389,6 +389,6 @@
             callbacksForStartSendRtpStream.remove(key);
             callbacksForError.remove(key);
         });
-        RedisUtil.convertAndSend(WVP_PUSH_STREAM_KEY, jsonObject);
+        redisTemplate.convertAndSend(WVP_PUSH_STREAM_KEY, jsonObject);
     }
 }
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 8902641..67f2e7e 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
@@ -23,6 +23,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 
 import java.util.*;
@@ -39,14 +40,17 @@
     @Autowired
     private UserSetting userSetting;
 
+    @Autowired
+    private RedisTemplate<Object, Object> redisTemplate;
+
     @Override
     public Long getCSEQ() {
         String key = VideoManagerConstants.SIP_CSEQ_PREFIX  + userSetting.getServerId();
 
-        long result =  RedisUtil.incr(key, 1L);
-        if (result > Integer.MAX_VALUE) {
-            RedisUtil.set(key, 1);
-            result = 1;
+        Long result =  redisTemplate.opsForValue().increment(key, 1L);
+        if (result != null && result > Integer.MAX_VALUE) {
+            redisTemplate.opsForValue().set(key, 1);
+            result = 1L;
         }
         return result;
     }
@@ -55,10 +59,10 @@
     public Long getSN(String method) {
         String key = VideoManagerConstants.SIP_SN_PREFIX  + userSetting.getServerId() + "_" +  method;
 
-        long result =  RedisUtil.incr(key, 1L);
-        if (result > Integer.MAX_VALUE) {
-            RedisUtil.set(key, 1);
-            result = 1;
+        Long result =  redisTemplate.opsForValue().increment(key, 1L);
+        if (result != null && result > Integer.MAX_VALUE) {
+            redisTemplate.opsForValue().set(key, 1);
+            result = 1L;
         }
         return result;
     }
@@ -66,61 +70,58 @@
     @Override
     public void resetAllCSEQ() {
         String scanKey = VideoManagerConstants.SIP_CSEQ_PREFIX  + userSetting.getServerId() + "_*";
-        List<Object> keys = RedisUtil.scan(scanKey);
+        List<Object> keys = RedisUtil.scan(redisTemplate, scanKey);
         for (Object o : keys) {
             String key = (String) o;
-            RedisUtil.set(key, 1);
+            redisTemplate.opsForValue().set(key, 1);
         }
     }
 
     @Override
     public void resetAllSN() {
         String scanKey = VideoManagerConstants.SIP_SN_PREFIX  + userSetting.getServerId() + "_*";
-        List<Object> keys = RedisUtil.scan(scanKey);
+        List<Object> keys = RedisUtil.scan(redisTemplate, scanKey);
         for (Object o : keys) {
             String key = (String) o;
-            RedisUtil.set(key, 1);
+            redisTemplate.opsForValue().set(key, 1);
         }
     }
 
     /**
      * 寮�濮嬫挱鏀炬椂灏嗘祦瀛樺叆redis
-     *
-     * @return
      */
     @Override
     public boolean startPlay(StreamInfo stream) {
 
-        return RedisUtil.set(String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(),
+         redisTemplate.opsForValue().set(String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(),
                         stream.getMediaServerId(), stream.getStream(), stream.getDeviceID(), stream.getChannelId()),
                 stream);
+        return true;
     }
 
     /**
      * 鍋滄鎾斁鏃朵粠redis鍒犻櫎
-     *
-     * @return
      */
     @Override
     public boolean stopPlay(StreamInfo streamInfo) {
         if (streamInfo == null) {
             return false;
         }
-        return RedisUtil.del(String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX,
+        Boolean result = redisTemplate.delete(String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX,
                 userSetting.getServerId(),
                 streamInfo.getMediaServerId(),
                 streamInfo.getStream(),
                 streamInfo.getDeviceID(),
                 streamInfo.getChannelId()));
+        return result != null && result;
     }
 
     /**
      * 鏌ヨ鎾斁鍒楄〃
-     * @return
      */
     @Override
     public StreamInfo queryPlay(StreamInfo streamInfo) {
-        return (StreamInfo)RedisUtil.get(String.format("%S_%s_%s_%s_%s_%s",
+        return (StreamInfo)redisTemplate.opsForValue().get(String.format("%S_%s_%s_%s_%s_%s",
                 VideoManagerConstants.PLAYER_PREFIX,
                 userSetting.getServerId(),
                 streamInfo.getMediaServerId(),
@@ -130,35 +131,35 @@
     }
     @Override
     public StreamInfo queryPlayByStreamId(String streamId) {
-        List<Object> playLeys = RedisUtil.scan(String.format("%S_%s_*_%s_*", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(), streamId));
-        if (playLeys == null || playLeys.size() == 0) {
+        List<Object> playLeys = RedisUtil.scan(redisTemplate, String.format("%S_%s_*_%s_*", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(), streamId));
+        if (playLeys.size() == 0) {
             return null;
         }
-        return (StreamInfo)RedisUtil.get(playLeys.get(0).toString());
+        return (StreamInfo)redisTemplate.opsForValue().get(playLeys.get(0).toString());
     }
 
     @Override
     public StreamInfo queryPlayByDevice(String deviceId, String channelId) {
-        List<Object> playLeys = RedisUtil.scan(String.format("%S_%s_*_*_%s_%s", VideoManagerConstants.PLAYER_PREFIX,
+        List<Object> playLeys = RedisUtil.scan(redisTemplate, String.format("%S_%s_*_*_%s_%s", VideoManagerConstants.PLAYER_PREFIX,
                 userSetting.getServerId(),
                 deviceId,
                 channelId));
-        if (playLeys == null || playLeys.size() == 0) {
+        if (playLeys.size() == 0) {
             return null;
         }
-        return (StreamInfo)RedisUtil.get(playLeys.get(0).toString());
+        return (StreamInfo)redisTemplate.opsForValue().get(playLeys.get(0).toString());
     }
 
     @Override
     public Map<String, StreamInfo> queryPlayByDeviceId(String deviceId) {
         Map<String, StreamInfo> streamInfos = new HashMap<>();
-        List<Object> players = RedisUtil.scan(String.format("%S_%s_*_*_%s_*", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(),deviceId));
+        List<Object> players = RedisUtil.scan(redisTemplate, String.format("%S_%s_*_*_%s_*", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(),deviceId));
         if (players.size() == 0) {
             return streamInfos;
         }
         for (Object player : players) {
             String key = (String) player;
-            StreamInfo streamInfo = JsonUtil.redisJsonToObject(key, StreamInfo.class);
+            StreamInfo streamInfo = JsonUtil.redisJsonToObject(redisTemplate, key, StreamInfo.class);
             if (Objects.isNull(streamInfo)) {
                 continue;
             }
@@ -170,23 +171,23 @@
 
     @Override
     public boolean startPlayback(StreamInfo stream, String callId) {
-        return RedisUtil.set(String.format("%S_%s_%s_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX,
+        redisTemplate.opsForValue().set(String.format("%S_%s_%s_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX,
                 userSetting.getServerId(), stream.getMediaServerId(), stream.getDeviceID(), stream.getChannelId(), stream.getStream(), callId), stream);
+        return true;
     }
 
     @Override
     public boolean startDownload(StreamInfo stream, String callId) {
-        boolean result;
         String key=String.format("%S_%s_%s_%s_%s_%s_%s", VideoManagerConstants.DOWNLOAD_PREFIX,
                 userSetting.getServerId(), stream.getMediaServerId(), stream.getDeviceID(), stream.getChannelId(), stream.getStream(), callId);
         if (stream.getProgress() == 1) {
             logger.debug("娣诲姞涓嬭浇缂撳瓨==宸插畬鎴愪笅杞�=銆媨}",key);
-            result = RedisUtil.set(key, stream);
+            redisTemplate.opsForValue().set(key, stream);
         }else {
             logger.debug("娣诲姞涓嬭浇缂撳瓨==鏈畬鎴愪笅杞�=銆媨}",key);
-            result = RedisUtil.set(key, stream, 60*60);
+            redisTemplate.opsForValue().set(key, stream, 60*60);
         }
-        return result;
+        return true;
     }
     @Override
     public boolean stopDownload(String deviceId, String channelId, String stream, String callId) {
@@ -215,10 +216,10 @@
                 stream,
                 callId
         );
-        List<Object> scan = RedisUtil.scan(key);
+        List<Object> scan = RedisUtil.scan(redisTemplate, key);
         if (scan.size() > 0) {
             for (Object keyObj : scan) {
-                RedisUtil.del((String) keyObj);
+                redisTemplate.delete(keyObj);
             }
         }
         return true;
@@ -251,10 +252,10 @@
                 stream,
                 callId
         );
-        List<Object> scan = RedisUtil.scan(key);
+        List<Object> scan = RedisUtil.scan(redisTemplate, key);
         if (scan.size() > 0) {
             for (Object keyObj : scan) {
-                RedisUtil.del((String) keyObj);
+                redisTemplate.delete(keyObj);
             }
         }
         return true;
@@ -284,9 +285,9 @@
                 stream,
                 callId
         );
-        List<Object> streamInfoScan = RedisUtil.scan(key);
+        List<Object> streamInfoScan = RedisUtil.scan(redisTemplate, key);
         if (streamInfoScan.size() > 0) {
-            return (StreamInfo) RedisUtil.get((String) streamInfoScan.get(0));
+            return (StreamInfo) redisTemplate.opsForValue().get(streamInfoScan.get(0));
         }else {
             return null;
         }
@@ -316,59 +317,59 @@
                 stream,
                 callId
         );
-        List<Object> streamInfoScan = RedisUtil.scan(key);
+        List<Object> streamInfoScan = RedisUtil.scan(redisTemplate, key);
         return (String) streamInfoScan.get(0);
     }
 
     @Override
     public void updatePlatformCatchInfo(ParentPlatformCatch parentPlatformCatch) {
         String key = VideoManagerConstants.PLATFORM_CATCH_PREFIX  + userSetting.getServerId() + "_" +  parentPlatformCatch.getId();
-        RedisUtil.set(key, parentPlatformCatch);
+        redisTemplate.opsForValue().set(key, parentPlatformCatch);
     }
 
     @Override
     public ParentPlatformCatch queryPlatformCatchInfo(String platformGbId) {
-        return (ParentPlatformCatch)RedisUtil.get(VideoManagerConstants.PLATFORM_CATCH_PREFIX + userSetting.getServerId() + "_" + platformGbId);
+        return (ParentPlatformCatch)redisTemplate.opsForValue().get(VideoManagerConstants.PLATFORM_CATCH_PREFIX + userSetting.getServerId() + "_" + platformGbId);
     }
 
     @Override
     public void delPlatformCatchInfo(String platformGbId) {
-        RedisUtil.del(VideoManagerConstants.PLATFORM_CATCH_PREFIX + userSetting.getServerId() + "_" + platformGbId);
+        redisTemplate.delete(VideoManagerConstants.PLATFORM_CATCH_PREFIX + userSetting.getServerId() + "_" + platformGbId);
     }
 
     @Override
     public void delPlatformKeepalive(String platformGbId) {
-        RedisUtil.del(VideoManagerConstants.PLATFORM_KEEPALIVE_PREFIX + userSetting.getServerId() + "_" + platformGbId);
+        redisTemplate.delete(VideoManagerConstants.PLATFORM_KEEPALIVE_PREFIX + userSetting.getServerId() + "_" + platformGbId);
     }
 
     @Override
     public void delPlatformRegister(String platformGbId) {
-        RedisUtil.del(VideoManagerConstants.PLATFORM_REGISTER_PREFIX + userSetting.getServerId() + "_" + platformGbId);
+        redisTemplate.delete(VideoManagerConstants.PLATFORM_REGISTER_PREFIX + userSetting.getServerId() + "_" + platformGbId);
     }
 
 
     @Override
     public void updatePlatformRegisterInfo(String callId, PlatformRegisterInfo platformRegisterInfo) {
         String key = VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + userSetting.getServerId() + "_" + callId;
-        RedisUtil.set(key, platformRegisterInfo, 30);
+        redisTemplate.opsForValue().set(key, platformRegisterInfo, 30);
     }
 
 
     @Override
     public PlatformRegisterInfo queryPlatformRegisterInfo(String callId) {
-        return (PlatformRegisterInfo)RedisUtil.get(VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + userSetting.getServerId() + "_" + callId);
+        return (PlatformRegisterInfo)redisTemplate.opsForValue().get(VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + userSetting.getServerId() + "_" + callId);
     }
 
     @Override
     public void delPlatformRegisterInfo(String callId) {
-        RedisUtil.del(VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + userSetting.getServerId() + "_" + callId);
+         redisTemplate.delete(VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + userSetting.getServerId() + "_" + callId);
     }
 
     @Override
     public void cleanPlatformRegisterInfos() {
-        List regInfos = RedisUtil.scan(VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + userSetting.getServerId() + "_" + "*");
+        List regInfos = RedisUtil.scan(redisTemplate, VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + userSetting.getServerId() + "_" + "*");
         for (Object key : regInfos) {
-            RedisUtil.del(key.toString());
+            redisTemplate.delete(key.toString());
         }
     }
 
@@ -382,7 +383,7 @@
                 + sendRtpItem.getChannelId() + "_"
                 + sendRtpItem.getStreamId() + "_"
                 + sendRtpItem.getCallId();
-        RedisUtil.set(key, sendRtpItem);
+        redisTemplate.opsForValue().set(key, sendRtpItem);
     }
 
     @Override
@@ -405,9 +406,9 @@
                 + channelId + "_"
                 + streamId + "_"
                 + callId;
-        List<Object> scan = RedisUtil.scan(key);
+        List<Object> scan = RedisUtil.scan(redisTemplate, key);
         if (scan.size() > 0) {
-            return (SendRtpItem)RedisUtil.get((String)scan.get(0));
+            return (SendRtpItem)redisTemplate.opsForValue().get(scan.get(0));
         }else {
             return null;
         }
@@ -427,10 +428,10 @@
                 + channelId + "_"
                 + streamId + "_"
                 + callId;
-        List<Object> scan = RedisUtil.scan(key);
+        List<Object> scan = RedisUtil.scan(redisTemplate, key);
         List<SendRtpItem> result = new ArrayList<>();
         for (Object o : scan) {
-            result.add((SendRtpItem) RedisUtil.get((String) o));
+            result.add((SendRtpItem) redisTemplate.opsForValue().get(o));
         }
         return result;
     }
@@ -449,10 +450,10 @@
                 + channelId + "_"
                 + stream + "_"
                 + callId;
-        List<Object> scan = RedisUtil.scan(key);
+        List<Object> scan = RedisUtil.scan(redisTemplate, key);
         List<SendRtpItem> result = new ArrayList<>();
         for (Object o : scan) {
-            result.add((SendRtpItem) RedisUtil.get((String) o));
+            result.add((SendRtpItem) redisTemplate.opsForValue().get(o));
         }
         return result;
     }
@@ -465,12 +466,12 @@
         String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX
                 + userSetting.getServerId() + "_*_"
                 + platformGbId + "_*" + "_*" + "_*";
-        List<Object> queryResult = RedisUtil.scan(key);
+        List<Object> queryResult = RedisUtil.scan(redisTemplate, key);
         List<SendRtpItem> result= new ArrayList<>();
 
         for (Object o : queryResult) {
             String keyItem = (String) o;
-            result.add((SendRtpItem) RedisUtil.get(keyItem));
+            result.add((SendRtpItem) redisTemplate.opsForValue().get(keyItem));
         }
 
         return result;
@@ -478,8 +479,6 @@
 
     /**
      * 鍒犻櫎RTP鎺ㄩ�佷俊鎭紦瀛�
-     * @param platformGbId
-     * @param channelId
      */
     @Override
     public void deleteSendRTPServer(String platformGbId, String channelId, String callId, String streamId) {
@@ -495,10 +494,10 @@
                 + channelId + "_"
                 + streamId + "_"
                 + callId;
-        List<Object> scan = RedisUtil.scan(key);
+        List<Object> scan = RedisUtil.scan(redisTemplate, key);
         if (scan.size() > 0) {
             for (Object keyStr : scan) {
-                RedisUtil.del((String)keyStr);
+                redisTemplate.delete(keyStr);
             }
         }
     }
@@ -507,12 +506,12 @@
     public List<SendRtpItem> queryAllSendRTPServer() {
         String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX
                 + userSetting.getServerId() + "_*";
-        List<Object> queryResult = RedisUtil.scan(key);
+        List<Object> queryResult = RedisUtil.scan(redisTemplate, key);
         List<SendRtpItem> result= new ArrayList<>();
 
         for (Object o : queryResult) {
             String keyItem = (String) o;
-            result.add((SendRtpItem) RedisUtil.get(keyItem));
+            result.add((SendRtpItem) redisTemplate.opsForValue().get(keyItem));
         }
 
         return result;
@@ -520,47 +519,42 @@
 
     /**
      * 鏌ヨ鏌愪釜閫氶亾鏄惁瀛樺湪涓婄骇鐐规挱锛圧TP鎺ㄩ�侊級
-     * @param channelId
      */
     @Override
     public boolean isChannelSendingRTP(String channelId) {
         String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX
                 + userSetting.getServerId() + "_*_*_"
                 + channelId + "*_" + "*_";
-        List<Object> RtpStreams = RedisUtil.scan(key);
-        if (RtpStreams.size() > 0) {
-            return true;
-        } else {
-            return false;
-        }
+        List<Object> RtpStreams = RedisUtil.scan(redisTemplate, key);
+        return RtpStreams.size() > 0;
     }
 
     @Override
     public void clearCatchByDeviceId(String deviceId) {
-        List<Object> playLeys = RedisUtil.scan(String.format("%S_%s_*_%s_*", VideoManagerConstants.PLAYER_PREFIX,
+        List<Object> playLeys = RedisUtil.scan(redisTemplate, String.format("%S_%s_*_%s_*", VideoManagerConstants.PLAYER_PREFIX,
                 userSetting.getServerId(),
                 deviceId));
         if (playLeys.size() > 0) {
             for (Object key : playLeys) {
-                RedisUtil.del(key.toString());
+                redisTemplate.delete(key.toString());
             }
         }
 
-        List<Object> playBackers = RedisUtil.scan(String.format("%S_%s_*_%s_*_*_*", VideoManagerConstants.PLAY_BLACK_PREFIX,
+        List<Object> playBackers = RedisUtil.scan(redisTemplate, String.format("%S_%s_*_%s_*_*_*", VideoManagerConstants.PLAY_BLACK_PREFIX,
                 userSetting.getServerId(),
                 deviceId));
         if (playBackers.size() > 0) {
             for (Object key : playBackers) {
-                RedisUtil.del(key.toString());
+                redisTemplate.delete(key.toString());
             }
         }
 
-        List<Object> deviceCache = RedisUtil.scan(String.format("%S%s_%s", VideoManagerConstants.DEVICE_PREFIX,
+        List<Object> deviceCache = RedisUtil.scan(redisTemplate, String.format("%S%s_%s", VideoManagerConstants.DEVICE_PREFIX,
                 userSetting.getServerId(),
                 deviceId));
         if (deviceCache.size() > 0) {
             for (Object key : deviceCache) {
-                RedisUtil.del(key.toString());
+                redisTemplate.delete(key.toString());
             }
         }
     }
@@ -568,14 +562,14 @@
     @Override
     public void updateWVPInfo(JSONObject jsonObject, int time) {
         String key = VideoManagerConstants.WVP_SERVER_PREFIX + userSetting.getServerId();
-        RedisUtil.set(key, jsonObject, time);
+        redisTemplate.opsForValue().set(key, jsonObject, time);
     }
 
     @Override
     public void sendStreamChangeMsg(String type, JSONObject jsonObject) {
         String key = VideoManagerConstants.WVP_MSG_STREAM_CHANGE_PREFIX + type;
         logger.info("[redis 娴佸彉鍖栦簨浠禲 {}: {}", key, jsonObject.toString());
-        RedisUtil.convertAndSend(key, jsonObject);
+        redisTemplate.convertAndSend(key, jsonObject);
     }
 
     @Override
@@ -586,13 +580,13 @@
         if (streamAuthorityInfo != null) {
             onStreamChangedHookParam.setCallId(streamAuthorityInfo.getCallId());
         }
-        RedisUtil.set(key, onStreamChangedHookParam);
+        redisTemplate.opsForValue().set(key, onStreamChangedHookParam);
     }
 
     @Override
     public void removeStream(String mediaServerId, String type, String app, String streamId) {
         String key = VideoManagerConstants.WVP_SERVER_STREAM_PREFIX + userSetting.getServerId() + "_" + type + "_"  + app + "_" + streamId + "_" + mediaServerId;
-        RedisUtil.del(key);
+        redisTemplate.delete(key);
     }
 
     @Override
@@ -619,9 +613,9 @@
                 stream,
                 callId
         );
-        List<Object> streamInfoScan = RedisUtil.scan2(key);
+        List<Object> streamInfoScan = RedisUtil.scan(redisTemplate, key);
         if (streamInfoScan.size() > 0) {
-            return (StreamInfo) RedisUtil.get((String) streamInfoScan.get(0));
+            return (StreamInfo) redisTemplate.opsForValue().get(streamInfoScan.get(0));
         }else {
             return null;
         }
@@ -630,15 +624,15 @@
     @Override
     public ThirdPartyGB queryMemberNoGBId(String queryKey) {
         String key = VideoManagerConstants.WVP_STREAM_GB_ID_PREFIX + queryKey;
-        return JsonUtil.redisJsonToObject(key, ThirdPartyGB.class);
+        return JsonUtil.redisJsonToObject(redisTemplate, key, ThirdPartyGB.class);
     }
 
     @Override
     public void removeStream(String mediaServerId, String type) {
         String key = VideoManagerConstants.WVP_SERVER_STREAM_PREFIX + userSetting.getServerId() + "_" + type + "_*_*_" + mediaServerId;
-        List<Object> streams = RedisUtil.scan(key);
+        List<Object> streams = RedisUtil.scan(redisTemplate, key);
         for (Object stream : streams) {
-            RedisUtil.del((String) stream);
+            redisTemplate.delete(stream);
         }
     }
 
@@ -646,9 +640,9 @@
     public List<OnStreamChangedHookParam> getStreams(String mediaServerId, String type) {
         List<OnStreamChangedHookParam> result = new ArrayList<>();
         String key = VideoManagerConstants.WVP_SERVER_STREAM_PREFIX + userSetting.getServerId() + "_" + type + "_*_*_" + mediaServerId;
-        List<Object> streams = RedisUtil.scan(key);
+        List<Object> streams = RedisUtil.scan(redisTemplate, key);
         for (Object stream : streams) {
-            OnStreamChangedHookParam onStreamChangedHookParam = (OnStreamChangedHookParam)RedisUtil.get((String) stream);
+            OnStreamChangedHookParam onStreamChangedHookParam = (OnStreamChangedHookParam)redisTemplate.opsForValue().get(stream);
             result.add(onStreamChangedHookParam);
         }
         return result;
@@ -657,21 +651,21 @@
     @Override
     public void updateDevice(Device device) {
         String key = VideoManagerConstants.DEVICE_PREFIX + userSetting.getServerId() + "_" + device.getDeviceId();
-        RedisUtil.set(key, device);
+        redisTemplate.opsForValue().set(key, device);
     }
 
     @Override
     public void removeDevice(String deviceId) {
         String key = VideoManagerConstants.DEVICE_PREFIX + userSetting.getServerId() + "_" + deviceId;
-        RedisUtil.del(key);
+        redisTemplate.delete(key);
     }
 
     @Override
     public void removeAllDevice() {
         String scanKey = VideoManagerConstants.DEVICE_PREFIX + userSetting.getServerId() + "_*";
-        List<Object> keys = RedisUtil.scan(scanKey);
+        List<Object> keys = RedisUtil.scan(redisTemplate, scanKey);
         for (Object key : keys) {
-            RedisUtil.del((String) key);
+            redisTemplate.delete(key);
         }
     }
 
@@ -679,12 +673,12 @@
     public List<Device> getAllDevices() {
         String scanKey = VideoManagerConstants.DEVICE_PREFIX + userSetting.getServerId() + "_*";
         List<Device> result = new ArrayList<>();
-        List<Object> keys = RedisUtil.scan(scanKey);
+        List<Object> keys = RedisUtil.scan(redisTemplate, scanKey);
         for (Object o : keys) {
             String key = (String) o;
-            Device device = JsonUtil.redisJsonToObject(key, Device.class);
+            Device device = JsonUtil.redisJsonToObject(redisTemplate, key, Device.class);
             if (Objects.nonNull(device)) { // 鍙彇娌℃湁瀛樿繃寰�
-                result.add(JsonUtil.redisJsonToObject(key, Device.class));
+                result.add(JsonUtil.redisJsonToObject(redisTemplate, key, Device.class));
             }
         }
 
@@ -694,31 +688,31 @@
     @Override
     public Device getDevice(String deviceId) {
         String key = VideoManagerConstants.DEVICE_PREFIX + userSetting.getServerId() + "_" + deviceId;
-        return JsonUtil.redisJsonToObject(key, Device.class);
+        return JsonUtil.redisJsonToObject(redisTemplate, key, Device.class);
     }
 
     @Override
     public void updateGpsMsgInfo(GPSMsgInfo gpsMsgInfo) {
         String key = VideoManagerConstants.WVP_STREAM_GPS_MSG_PREFIX + userSetting.getServerId() + "_" + gpsMsgInfo.getId();
-        RedisUtil.set(key, gpsMsgInfo, 60); // 榛樿GPS娑堟伅淇濆瓨1鍒嗛挓
+        redisTemplate.opsForValue().set(key, gpsMsgInfo, 60); // 榛樿GPS娑堟伅淇濆瓨1鍒嗛挓
     }
 
     @Override
     public GPSMsgInfo getGpsMsgInfo(String gbId) {
         String key = VideoManagerConstants.WVP_STREAM_GPS_MSG_PREFIX + userSetting.getServerId() + "_" + gbId;
-        return JsonUtil.redisJsonToObject(key, GPSMsgInfo.class);
+        return JsonUtil.redisJsonToObject(redisTemplate, key, GPSMsgInfo.class);
     }
 
     @Override
     public List<GPSMsgInfo> getAllGpsMsgInfo() {
         String scanKey = VideoManagerConstants.WVP_STREAM_GPS_MSG_PREFIX + userSetting.getServerId() + "_*";
         List<GPSMsgInfo> result = new ArrayList<>();
-        List<Object> keys = RedisUtil.scan(scanKey);
+        List<Object> keys = RedisUtil.scan(redisTemplate, scanKey);
         for (Object o : keys) {
             String key = (String) o;
-            GPSMsgInfo gpsMsgInfo = JsonUtil.redisJsonToObject(key, GPSMsgInfo.class);
+            GPSMsgInfo gpsMsgInfo = JsonUtil.redisJsonToObject(redisTemplate, key, GPSMsgInfo.class);
             if (Objects.nonNull(gpsMsgInfo) && !gpsMsgInfo.isStored()) { // 鍙彇娌℃湁瀛樿繃寰�
-                result.add(JsonUtil.redisJsonToObject(key, GPSMsgInfo.class));
+                result.add(JsonUtil.redisJsonToObject(redisTemplate, key, GPSMsgInfo.class));
             }
         }
 
@@ -728,19 +722,19 @@
     @Override
     public void updateStreamAuthorityInfo(String app, String stream, StreamAuthorityInfo streamAuthorityInfo) {
         String key = VideoManagerConstants.MEDIA_STREAM_AUTHORITY + userSetting.getServerId() + "_" + app+ "_" + stream;
-        RedisUtil.set(key, streamAuthorityInfo);
+        redisTemplate.opsForValue().set(key, streamAuthorityInfo);
     }
 
     @Override
     public void removeStreamAuthorityInfo(String app, String stream) {
         String key = VideoManagerConstants.MEDIA_STREAM_AUTHORITY + userSetting.getServerId() + "_" + app+ "_" + stream ;
-        RedisUtil.del(key);
+        redisTemplate.delete(key);
     }
 
     @Override
     public StreamAuthorityInfo getStreamAuthorityInfo(String app, String stream) {
         String key = VideoManagerConstants.MEDIA_STREAM_AUTHORITY + userSetting.getServerId() + "_" + app+ "_" + stream ;
-        return JsonUtil.redisJsonToObject(key, StreamAuthorityInfo.class);
+        return JsonUtil.redisJsonToObject(redisTemplate, key, StreamAuthorityInfo.class);
 
     }
 
@@ -748,10 +742,10 @@
     public List<StreamAuthorityInfo> getAllStreamAuthorityInfo() {
         String scanKey = VideoManagerConstants.MEDIA_STREAM_AUTHORITY + userSetting.getServerId() + "_*_*" ;
         List<StreamAuthorityInfo> result = new ArrayList<>();
-        List<Object> keys = RedisUtil.scan(scanKey);
+        List<Object> keys = RedisUtil.scan(redisTemplate, scanKey);
         for (Object o : keys) {
             String key = (String) o;
-            result.add(JsonUtil.redisJsonToObject(key, StreamAuthorityInfo.class));
+            result.add(JsonUtil.redisJsonToObject(redisTemplate, key, StreamAuthorityInfo.class));
         }
         return result;
     }
@@ -762,10 +756,10 @@
         String scanKey = VideoManagerConstants.WVP_SERVER_STREAM_PREFIX  + userSetting.getServerId() + "_*_" + app + "_" + streamId + "_" + mediaServerId;
 
         OnStreamChangedHookParam result = null;
-        List<Object> keys = RedisUtil.scan(scanKey);
+        List<Object> keys = RedisUtil.scan(redisTemplate, scanKey);
         if (keys.size() > 0) {
             String key = (String) keys.get(0);
-            result = JsonUtil.redisJsonToObject(key, OnStreamChangedHookParam.class);
+            result = JsonUtil.redisJsonToObject(redisTemplate, key, OnStreamChangedHookParam.class);
         }
 
         return result;
@@ -776,12 +770,13 @@
         String key = VideoManagerConstants.SYSTEM_INFO_CPU_PREFIX + userSetting.getServerId();
         Map<String, String> infoMap = new HashMap<>();
         infoMap.put("time", DateUtil.getNow());
-        infoMap.put("data", cpuInfo + "");
-        RedisUtil.lSet(key, infoMap);
+        infoMap.put("data", String.valueOf(cpuInfo));
+        redisTemplate.opsForList().rightPush(key, infoMap);
         // 姣忕涓�涓紝鏈�澶氬彧瀛�30涓�
-        if (RedisUtil.lGetListSize(key) >= 30) {
-            for (int i = 0; i < RedisUtil.lGetListSize(key) - 30; i++) {
-                RedisUtil.lLeftPop(key);
+        Long size = redisTemplate.opsForList().size(key);
+        if (size != null && size >= 30) {
+            for (int i = 0; i < size - 30; i++) {
+                redisTemplate.opsForList().leftPop(key);
             }
         }
     }
@@ -791,12 +786,13 @@
         String key = VideoManagerConstants.SYSTEM_INFO_MEM_PREFIX + userSetting.getServerId();
         Map<String, String> infoMap = new HashMap<>();
         infoMap.put("time", DateUtil.getNow());
-        infoMap.put("data", memInfo + "");
-        RedisUtil.lSet(key, infoMap);
+        infoMap.put("data", String.valueOf(memInfo));
+        redisTemplate.opsForList().rightPush(key, infoMap);
         // 姣忕涓�涓紝鏈�澶氬彧瀛�30涓�
-        if (RedisUtil.lGetListSize(key) >= 30) {
-            for (int i = 0; i < RedisUtil.lGetListSize(key) - 30; i++) {
-                RedisUtil.lLeftPop(key);
+        Long size = redisTemplate.opsForList().size(key);
+        if (size != null && size >= 30) {
+            for (int i = 0; i < size - 30; i++) {
+                redisTemplate.opsForList().leftPop(key);
             }
         }
     }
@@ -809,11 +805,12 @@
         for (String netKey : networkInterfaces.keySet()) {
             infoMap.put(netKey, networkInterfaces.get(netKey));
         }
-        RedisUtil.lSet(key, infoMap);
+        redisTemplate.opsForList().rightPush(key, infoMap);
         // 姣忕涓�涓紝鏈�澶氬彧瀛�30涓�
-        if (RedisUtil.lGetListSize(key) >= 30) {
-            for (int i = 0; i < RedisUtil.lGetListSize(key) - 30; i++) {
-                RedisUtil.lLeftPop(key);
+        Long size = redisTemplate.opsForList().size(key);
+        if (size != null && size >= 30) {
+            for (int i = 0; i < size - 30; i++) {
+                redisTemplate.opsForList().leftPop(key);
             }
         }
     }
@@ -822,7 +819,7 @@
     public void addDiskInfo(List<Map<String, Object>> diskInfo) {
 
         String key = VideoManagerConstants.SYSTEM_INFO_DISK_PREFIX + userSetting.getServerId();
-        RedisUtil.set(key, diskInfo);
+        redisTemplate.opsForValue().set(key, diskInfo);
     }
 
     @Override
@@ -832,11 +829,11 @@
         String netKey = VideoManagerConstants.SYSTEM_INFO_NET_PREFIX + userSetting.getServerId();
         String diskKey = VideoManagerConstants.SYSTEM_INFO_DISK_PREFIX + userSetting.getServerId();
         SystemAllInfo systemAllInfo = new SystemAllInfo();
-        systemAllInfo.setCpu(RedisUtil.lGet(cpuKey, 0, -1));
-        systemAllInfo.setMem(RedisUtil.lGet(memKey, 0, -1));
-        systemAllInfo.setNet(RedisUtil.lGet(netKey, 0, -1));
+        systemAllInfo.setCpu(redisTemplate.opsForList().range(cpuKey, 0, -1));
+        systemAllInfo.setMem(redisTemplate.opsForList().range(memKey, 0, -1));
+        systemAllInfo.setNet(redisTemplate.opsForList().range(netKey, 0, -1));
 
-        systemAllInfo.setDisk(RedisUtil.get(diskKey));
+        systemAllInfo.setDisk(redisTemplate.opsForValue().get(diskKey));
         systemAllInfo.setNetTotal(SystemInfoUtils.getNetworkTotal());
         return systemAllInfo;
     }
@@ -845,14 +842,14 @@
     public void sendMobilePositionMsg(JSONObject jsonObject) {
         String key = VideoManagerConstants.VM_MSG_SUBSCRIBE_MOBILE_POSITION;
         logger.info("[redis鍙戦�侀�氱煡] 绉诲姩浣嶇疆 {}: {}", key, jsonObject.toString());
-        RedisUtil.convertAndSend(key, jsonObject);
+        redisTemplate.convertAndSend(key, jsonObject);
     }
 
     @Override
     public void sendStreamPushRequestedMsg(MessageForPushChannel msg) {
         String key = VideoManagerConstants.VM_MSG_STREAM_PUSH_REQUESTED;
         logger.info("[redis鍙戦�侀�氱煡] 鎺ㄦ祦琚姹� {}: {}/{}", key, msg.getApp(), msg.getStream());
-        RedisUtil.convertAndSend(key, (JSONObject)JSON.toJSON(msg));
+        redisTemplate.convertAndSend(key, JSON.toJSON(msg));
     }
 
     @Override
@@ -860,7 +857,7 @@
         // 姝ゆ秷鎭敤浜庡鎺ョ涓夋柟鏈嶅姟涓嬬骇鏉ョ殑娑堟伅鍐呭
         String key = VideoManagerConstants.VM_MSG_SUBSCRIBE_ALARM;
         logger.info("[redis鍙戦�侀�氱煡] 鎶ヨ{}: {}", key, JSON.toJSON(msg));
-        RedisUtil.convertAndSend(key, (JSONObject)JSON.toJSON(msg));
+        redisTemplate.convertAndSend(key, JSON.toJSON(msg));
     }
 
     @Override
@@ -875,19 +872,19 @@
         logger.info("[redis閫氱煡]鑾峰彇鎵�鏈夋帹娴佽澶囩殑鐘舵��");
         JSONObject jsonObject = new JSONObject();
         jsonObject.put(key, key);
-        RedisUtil.convertAndSend(key, jsonObject);
+        redisTemplate.convertAndSend(key, jsonObject);
     }
 
     @Override
     public int getPushStreamCount(String id) {
         String key = VideoManagerConstants.WVP_SERVER_STREAM_PREFIX + userSetting.getServerId() + "_PUSH_*_*_" + id;
-        return RedisUtil.scan(key).size();
+        return RedisUtil.scan(redisTemplate, key).size();
     }
 
     @Override
     public int getProxyStreamCount(String id) {
         String key = VideoManagerConstants.WVP_SERVER_STREAM_PREFIX + userSetting.getServerId() + "_PULL_*_*_" + id;
-        return RedisUtil.scan(key).size();
+        return RedisUtil.scan(redisTemplate, key).size();
     }
 
     @Override
@@ -896,13 +893,13 @@
         String playBackKey = VideoManagerConstants.PLAY_BLACK_PREFIX + "_" + userSetting.getServerId() + "_" + id + "_*";
         String downloadKey = VideoManagerConstants.DOWNLOAD_PREFIX + "_" + userSetting.getServerId() + "_" + id + "_*";
 
-        return RedisUtil.scan(playKey).size() + RedisUtil.scan(playBackKey).size() + RedisUtil.scan(downloadKey).size();
+        return RedisUtil.scan(redisTemplate, playKey).size() + RedisUtil.scan(redisTemplate, playBackKey).size() + RedisUtil.scan(redisTemplate, downloadKey).size();
     }
 
     @Override
     public int getGbSendCount(String id) {
         String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX
                 + userSetting.getServerId() + "_*_" + id + "_*";
-        return RedisUtil.scan(key).size();
+        return RedisUtil.scan(redisTemplate, key).size();
     }
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/JsonUtil.java b/src/main/java/com/genersoft/iot/vmp/utils/JsonUtil.java
index 60e2dbe..de8675f 100644
--- a/src/main/java/com/genersoft/iot/vmp/utils/JsonUtil.java
+++ b/src/main/java/com/genersoft/iot/vmp/utils/JsonUtil.java
@@ -1,8 +1,6 @@
 package com.genersoft.iot.vmp.utils;
 
-import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONObject;
-import com.genersoft.iot.vmp.utils.redis.RedisUtil;
+import org.springframework.data.redis.core.RedisTemplate;
 
 import java.util.Objects;
 
@@ -26,8 +24,8 @@
      * @param <T>
      * @return result type
      */
-    public static <T> T redisJsonToObject(String key, Class<T> clazz) {
-        Object jsonObject = RedisUtil.get(key);
+    public static <T> T redisJsonToObject(RedisTemplate<Object, Object> redisTemplate, String key, Class<T> clazz) {
+        Object jsonObject = redisTemplate.opsForValue().get(key);
         if (Objects.isNull(jsonObject)) {
             return null;
         }
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java b/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java
index e54ed53..31e89f9 100644
--- a/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java
+++ b/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java
@@ -1,873 +1,32 @@
 package com.genersoft.iot.vmp.utils.redis;
 
-import com.alibaba.fastjson2.JSONObject;
-import com.genersoft.iot.vmp.utils.SpringBeanFactory;
-import org.springframework.data.redis.core.*;
-import org.springframework.util.CollectionUtils;
+import org.springframework.data.redis.core.Cursor;
+import org.springframework.data.redis.core.RedisCallback;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.ScanOptions;
 
-import java.util.*;
-import java.util.concurrent.TimeUnit;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
-/**    
+/**
  * Redis宸ュ叿绫�
+ *
  * @author swwheihei
  * @date 2020骞�5鏈�6鏃� 涓嬪崍8:27:29
  */
 @SuppressWarnings(value = {"rawtypes", "unchecked"})
 public class RedisUtil {
 
-    private static RedisTemplate redisTemplate;
-
-    static {
-        redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-    }
-
-	/**
-     * 鎸囧畾缂撳瓨澶辨晥鏃堕棿
-     * @param key 閿�
-     * @param time 鏃堕棿锛堢锛�
-     * @return true / false
-     */
-    public static boolean expire(String key, long time) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        try {
-            if (time > 0) {
-                redisTemplate.expire(key, time, TimeUnit.SECONDS);
-            }
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 鏍规嵁 key 鑾峰彇杩囨湡鏃堕棿
-     * @param key 閿�
-     */
-    public static long getExpire(String key) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        return redisTemplate.getExpire(key, TimeUnit.SECONDS);
-    }
-
-    /**
-     * 鍒ゆ柇 key 鏄惁瀛樺湪
-     * @param key 閿�
-     * @return true / false
-     */
-    public static boolean hasKey(String key) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        try {
-            return redisTemplate.hasKey(key);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 鍒犻櫎缂撳瓨
-     * @SuppressWarnings("unchecked") 蹇界暐绫诲瀷杞崲璀﹀憡
-     * @param key 閿紙涓�涓垨鑰呭涓級
-     */
-    public static boolean del(String... key) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-    	try {
-    		if (key != null && key.length > 0) {
-                if (key.length == 1) {
-                    redisTemplate.delete(key[0]);
-                } else {
-//                    浼犲叆涓�涓� Collection<String> 闆嗗悎
-                    redisTemplate.delete(CollectionUtils.arrayToList(key));
-                }
-            }
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-//    ============================== String ==============================
-
-    /**
-     * 鏅�氱紦瀛樿幏鍙�
-     * @param key 閿�
-     * @return 鍊�
-     */
-    public static Object get(String key) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        return key == null ? null : redisTemplate.opsForValue().get(key);
-    }
-
-    /**
-     * 鏅�氱紦瀛樻斁鍏�
-     * @param key 閿�
-     * @param value 鍊�
-     * @return true / false
-     */
-    public static boolean set(String key, Object value) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        try {
-            redisTemplate.opsForValue().set(key, value);
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 鏅�氱紦瀛樻斁鍏ュ苟璁剧疆鏃堕棿
-     * @param key 閿�
-     * @param value 鍊�
-     * @param time 鏃堕棿锛堢锛夛紝濡傛灉 time < 0 鍒欒缃棤闄愭椂闂�
-     * @return true / false
-     */
-    public static boolean set(String key, Object value, long time) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        try {
-            if (time > 0) {
-                redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
-            } else {
-                set(key, value);
-            }
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 閫掑
-     * @param key 閿�
-     * @param delta 閫掑澶у皬
-     * @return
-     */
-    public static long incr(String key, long delta) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        if (delta < 0) {
-            throw new RuntimeException("閫掑鍥犲瓙蹇呴』澶т簬 0");
-        }
-        return redisTemplate.opsForValue().increment(key, delta);
-    }
-
-    /**
-     * 閫掑噺
-     * @param key 閿�
-     * @param delta 閫掑噺澶у皬
-     * @return
-     */
-    public static long decr(String key, long delta) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        if (delta < 0) {
-            throw new RuntimeException("閫掑噺鍥犲瓙蹇呴』澶т簬 0");
-        }
-        return redisTemplate.opsForValue().increment(key, delta);
-    }
-
-//    ============================== Map ==============================
-
-    /**
-     * HashGet
-     * @param key 閿紙no null锛�
-     * @param item 椤癸紙no null锛�
-     * @return 鍊�
-     */
-    public static Object hget(String key, String item) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        return redisTemplate.opsForHash().get(key, item);
-    }
-
-    /**
-     * 鑾峰彇 key 瀵瑰簲鐨� map
-     * @param key 閿紙no null锛�
-     * @return 瀵瑰簲鐨勫涓敭鍊�
-     */
-    public static Map<Object, Object> hmget(String key) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        return redisTemplate.opsForHash().entries(key);
-    }
-
-    /**
-     * HashSet
-     * @param key 閿�
-     * @param map 鍊�
-     * @return true / false
-     */
-    public static boolean hmset(String key, Map<Object, Object> map) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        try {
-            redisTemplate.opsForHash().putAll(key, map);
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * HashSet 骞惰缃椂闂�
-     * @param key 閿�
-     * @param map 鍊�
-     * @param time 鏃堕棿
-     * @return true / false
-     */
-    public static boolean hmset(String key, Map<?, ?> map, long time) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        try {
-            redisTemplate.opsForHash().putAll(key, map);
-            if (time > 0) {
-                expire(key, time);
-            }
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 鍚戜竴寮� Hash琛� 涓斁鍏ユ暟鎹紝濡備笉瀛樺湪鍒欏垱寤�
-     * @param key 閿�
-     * @param item 椤�
-     * @param value 鍊�
-     * @return true / false
-     */
-    public static boolean hset(String key, String item, Object value) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        try {
-            redisTemplate.opsForHash().put(key, item, value);
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 鍚戜竴寮� Hash琛� 涓斁鍏ユ暟鎹紝骞惰缃椂闂达紝濡備笉瀛樺湪鍒欏垱寤�
-     * @param key 閿�
-     * @param item 椤�
-     * @param value 鍊�
-     * @param time 鏃堕棿锛堝鏋滃師鏉ョ殑 Hash琛� 璁剧疆浜嗘椂闂达紝杩欓噷浼氳鐩栵級
-     * @return true / false
-     */
-    public static boolean hset(String key, String item, Object value, long time) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        try {
-            redisTemplate.opsForHash().put(key, item, value);
-            if (time > 0) {
-                expire(key, time);
-            }
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 鍒犻櫎 Hash琛� 涓殑鍊�
-     * @param key 閿�
-     * @param item 椤癸紙鍙互澶氫釜锛宯o null锛�
-     */
-    public static void hdel(String key, Object... item) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        redisTemplate.opsForHash().delete(key, item);
-    }
-
-    /**
-     * 鍒ゆ柇 Hash琛� 涓槸鍚︽湁璇ラ敭鐨勫��
-     * @param key 閿紙no null锛�
-     * @param item 鍊硷紙no null锛�
-     * @return true / false
-     */
-    public static boolean hHasKey(String key, String item) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        return redisTemplate.opsForHash().hasKey(key, item);
-    }
-
-    /**
-     * Hash閫掑锛屽鏋滀笉瀛樺湪鍒欏垱寤轰竴涓紝骞舵妸鏂板鐨勫�艰繑鍥�
-     * @param key 閿�
-     * @param item 椤�
-     * @param by 閫掑澶у皬 > 0
-     * @return
-     */
-    public static Double hincr(String key, String item, Double by) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        return redisTemplate.opsForHash().increment(key, item, by);
-    }
-
-    /**
-     * Hash閫掑噺
-     * @param key 閿�
-     * @param item 椤�
-     * @param by 閫掑噺澶у皬
-     * @return
-     */
-    public static Double hdecr(String key, String item, Double by) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        return redisTemplate.opsForHash().increment(key, item, -by);
-    }
-
-//    ============================== Set ==============================
-
-    /**
-     * 鏍规嵁 key 鑾峰彇 set 涓殑鎵�鏈夊��
-     * @param key 閿�
-     * @return 鍊�
-     */
-    public static Set<Object> sGet(String key) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        try {
-            return redisTemplate.opsForSet().members(key);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return null;
-        }
-    }
-
-    /**
-     * 浠庨敭涓� key 鐨� set 涓紝鏍规嵁 value 鏌ヨ鏄惁瀛樺湪
-     * @param key 閿�
-     * @param value 鍊�
-     * @return true / false
-     */
-    public static boolean sHasKey(String key, Object value) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        try {
-            return redisTemplate.opsForSet().isMember(key, value);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 灏嗘暟鎹斁鍏� set缂撳瓨
-     * @param key 閿��
-     * @param values 鍊硷紙鍙互澶氫釜锛�
-     * @return 鎴愬姛涓暟
-     */
-    public static long sSet(String key, Object... values) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        try {
-            return redisTemplate.opsForSet().add(key, values);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return 0;
-        }
-    }
-
-    /**
-     * 灏嗘暟鎹斁鍏� set缂撳瓨锛屽苟璁剧疆鏃堕棿
-     * @param key 閿�
-     * @param time 鏃堕棿
-     * @param values 鍊硷紙鍙互澶氫釜锛�
-     * @return 鎴愬姛鏀惧叆涓暟
-     */
-    public static long sSet(String key, long time, Object... values) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        try {
-            long count = redisTemplate.opsForSet().add(key, values);
-            if (time > 0) {
-                expire(key, time);
-            }
-            return count;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return 0;
-        }
-    }
-
-    /**
-     * 鑾峰彇 set缂撳瓨鐨勯暱搴�
-     * @param key 閿�
-     * @return 闀垮害
-     */
-    public static long sGetSetSize(String key) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        try {
-            return redisTemplate.opsForSet().size(key);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return 0;
-        }
-    }
-
-    /**
-     * 绉婚櫎 set缂撳瓨涓紝鍊间负 value 鐨�
-     * @param key 閿�
-     * @param values 鍊�
-     * @return 鎴愬姛绉婚櫎涓暟
-     */
-    public static long setRemove(String key, Object... values) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        try {
-            return redisTemplate.opsForSet().remove(key, values);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return 0;
-        }
-    }
-//    ============================== ZSet ==============================
-
-    /**
-     * 娣诲姞涓�涓厓绱�, zset涓巗et鏈�澶х殑鍖哄埆灏辨槸姣忎釜鍏冪礌閮芥湁涓�涓猻core锛屽洜姝ゆ湁涓帓搴忕殑杈呭姪鍔熻兘;  zadd
-     *
-     * @param key
-     * @param value
-     * @param score
-     */
-    public static void zAdd(Object key, Object value, double score) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        redisTemplate.opsForZSet().add(key, value, score);
-    }
-
-    /**
-     * 鍒犻櫎鍏冪礌 zrem
-     *
-     * @param key
-     * @param value
-     */
-    public static void zRemove(Object key, Object value) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        redisTemplate.opsForZSet().remove(key, value);
-    }
-
-    /**
-     * score鐨勫鍔爋r鍑忓皯 zincrby
-     *
-     * @param key
-     * @param value
-     * @param delta -1 琛ㄧず鍑� 1 琛ㄧず鍔�1
-     */
-    public static Double zIncrScore(Object key, Object value, double delta) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        return redisTemplate.opsForZSet().incrementScore(key, value, delta);
-    }
-
-    /**
-     * 鏌ヨvalue瀵瑰簲鐨剆core   zscore
-     *
-     * @param key
-     * @param value
-     * @return
-     */
-    public static Double zScore(Object key, Object value) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        return redisTemplate.opsForZSet().score(key, value);
-    }
-
-    /**
-     * 鍒ゆ柇value鍦▃set涓殑鎺掑悕  zrank
-     *
-     * @param key
-     * @param value
-     * @return
-     */
-    public static Long zRank(Object key, Object value) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        return redisTemplate.opsForZSet().rank(key, value);
-    }
-
-    /**
-     * 杩斿洖闆嗗悎鐨勯暱搴�
-     *
-     * @param key
-     * @return
-     */
-    public static Long zSize(Object key) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        return redisTemplate.opsForZSet().zCard(key);
-    }
-
-    /**
-     * 鏌ヨ闆嗗悎涓寚瀹氶『搴忕殑鍊硷紝 0 -1 琛ㄧず鑾峰彇鍏ㄩ儴鐨勯泦鍚堝唴瀹�  zrange
-     *
-     * 杩斿洖鏈夊簭鐨勯泦鍚堬紝score灏忕殑鍦ㄥ墠闈�
-     *
-     * @param key
-     * @param start
-     * @param end
-     * @return
-     */
-    public static Set<Object> zRange(Object key, int start, int end) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        return redisTemplate.opsForZSet().range(key, start, end);
-    }
-    /**
-     * 鏌ヨ闆嗗悎涓寚瀹氶『搴忕殑鍊煎拰score锛�0, -1 琛ㄧず鑾峰彇鍏ㄩ儴鐨勯泦鍚堝唴瀹�
-     *
-     * @param key
-     * @param start
-     * @param end
-     * @return
-     */
-    public static Set<ZSetOperations.TypedTuple<String>> zRangeWithScore(Object key, int start, int end) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        return redisTemplate.opsForZSet().rangeWithScores(key, start, end);
-    }
-    /**
-     * 鏌ヨ闆嗗悎涓寚瀹氶『搴忕殑鍊�  zrevrange
-     *
-     * 杩斿洖鏈夊簭鐨勯泦鍚堜腑锛宻core澶х殑鍦ㄥ墠闈�
-     *
-     * @param key
-     * @param start
-     * @param end
-     * @return
-     */
-    public static Set<String> zRevRange(Object key, int start, int end) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        return redisTemplate.opsForZSet().reverseRange(key, start, end);
-    }
-    /**
-     * 鏍规嵁score鐨勫�硷紝鏉ヨ幏鍙栨弧瓒虫潯浠剁殑闆嗗悎  zrangebyscore
-     *
-     * @param key
-     * @param min
-     * @param max
-     * @return
-     */
-    public static Set<String> zSortRange(Object key, int min, int max) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        return redisTemplate.opsForZSet().rangeByScore(key, min, max);
-    }
-
-
-//    ============================== List ==============================
-
-    /**
-     * 鑾峰彇 list缂撳瓨鐨勫唴瀹�
-     * @param key 閿�
-     * @param start 寮�濮�
-     * @param end 缁撴潫锛�0 鍒� -1 浠h〃鎵�鏈夊�硷級
-     * @return
-     */
-    public static List<Object> lGet(String key, long start, long end) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        try {
-            return redisTemplate.opsForList().range(key, start, end);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return null;
-        }
-    }
-
-    /**
-     * 鑾峰彇 list缂撳瓨鐨勯暱搴�
-     * @param key 閿�
-     * @return 闀垮害
-     */
-    public static long lGetListSize(String key) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        try {
-            return redisTemplate.opsForList().size(key);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return 0;
-        }
-    }
-
-    /**
-     * 鏍规嵁绱㈠紩 index 鑾峰彇閿负 key 鐨� list 涓殑鍏冪礌
-     * @param key 閿�
-     * @param index 绱㈠紩
-     *              褰� index >= 0 鏃� {0:琛ㄥご, 1:绗簩涓厓绱爙
-     *              褰� index < 0 鏃� {-1:琛ㄥ熬, -2:鍊掓暟绗簩涓厓绱爙
-     * @return 鍊�
-     */
-    public static Object lGetIndex(String key, long index) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        try {
-            return redisTemplate.opsForList().index(key, index);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return null;
-        }
-    }
-
-    /**
-     * 灏嗗�� value 鎻掑叆閿负 key 鐨� list 涓紝濡傛灉 list 涓嶅瓨鍦ㄥ垯鍒涘缓绌� list
-     * @param key 閿�
-     * @param value 鍊�
-     * @return true / false
-     */
-    public static boolean lSet(String key, Object value) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        try {
-            redisTemplate.opsForList().rightPush(key, value);
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 灏嗗�� value 鎻掑叆閿负 key 鐨� list 涓紝骞惰缃椂闂�
-     * @param key 閿�
-     * @param value 鍊�
-     * @param time 鏃堕棿
-     * @return true / false
-     */
-    public static boolean lSet(String key, Object value, long time) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        try {
-            redisTemplate.opsForList().rightPush(key, value);
-            if (time > 0) {
-                expire(key, time);
-            }
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 灏� values 鎻掑叆閿负 key 鐨� list 涓�
-     * @param key 閿�
-     * @param values 鍊�
-     * @return true / false
-     */
-    public static boolean lSetList(String key, List<Object> values) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        try {
-            redisTemplate.opsForList().rightPushAll(key, values);
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 灏� values 鎻掑叆閿负 key 鐨� list 涓紝骞惰缃椂闂�
-     * @param key 閿�
-     * @param values 鍊�
-     * @param time 鏃堕棿
-     * @return true / false
-     */
-    public static boolean lSetList(String key, List<Object> values, long time) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        try {
-            redisTemplate.opsForList().rightPushAll(key, values);
-            if (time > 0) {
-                expire(key, time);
-            }
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 鏍规嵁绱㈠紩 index 淇敼閿负 key 鐨勫��
-     * @param key 閿�
-     * @param index 绱㈠紩
-     * @param value 鍊�
-     * @return true / false
-     */
-    public static boolean lUpdateIndex(String key, long index, Object value) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        try {
-            redisTemplate.opsForList().set(key, index, value);
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 鍦ㄩ敭涓� key 鐨� list 涓垹闄ゅ�间负 value 鐨勫厓绱�
-     * @param key 閿�
-     * @param count 濡傛灉 count == 0 鍒欏垹闄� list 涓墍鏈夊�间负 value 鐨勫厓绱�
-     *              濡傛灉 count > 0 鍒欏垹闄� list 涓渶宸﹁竟閭d釜鍊间负 value 鐨勫厓绱�
-     *              濡傛灉 count < 0 鍒欏垹闄� list 涓渶鍙宠竟閭d釜鍊间负 value 鐨勫厓绱�
-     * @param value
-     * @return
-     */
-    public static long lRemove(String key, long count, Object value) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        try {
-            return redisTemplate.opsForList().remove(key, count, value);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return 0;
-        }
-    }
-
-    /**
-     * 鍦ㄩ敭涓� key 鐨� list涓Щ闄ょ涓�涓厓绱�
-     * @param key 閿�
-     * @return
-     */
-    public static Object lLeftPop(String key) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        return redisTemplate.opsForList().leftPop(key);
-    }
-
-    /**
-     * 鍦ㄩ敭涓� key 鐨� list涓Щ闄ゃ�佹渶鍚庝竴涓厓绱�
-     * @param key 閿�
-     * @return
-     */
-    public static Object lrightPop(String key) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        return redisTemplate.opsForList().rightPop(key);
-    }
-
     /**
      * 妯$硦鏌ヨ
-     * @param key 閿�
-     * @return true / false
-     */
-    public static List<Object> keys(String key) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        try {
-            Set<String> set = redisTemplate.keys(key);
-            return new ArrayList<>(set);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return null;
-        }
-    }
-
-
-    /**
-     * 妯$硦鏌ヨ
+     *
      * @param query 鏌ヨ鍙傛暟
      * @return
      */
-//    public static List<Object> scan(String query) {
-//        List<Object> result = new ArrayList<>();
-//        try {
-//            Cursor<Map.Entry<Object,Object>> cursor = redisTemplate.opsForHash().scan("field",
-//                    ScanOptions.scanOptions().match(query).count(1000).build());
-//            while (cursor.hasNext()) {
-//                Map.Entry<Object,Object> entry = cursor.next();
-//                result.add(entry.getKey());
-//                Object key = entry.getKey();
-//                Object valueSet = entry.getValue();
-//            }
-//            //鍏抽棴cursor
-//            cursor.close();
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-//        return result;
-//    }
+    public static List<Object> scan(RedisTemplate redisTemplate, String query) {
 
-    /**
-     * 妯$硦鏌ヨ
-     * @param query 鏌ヨ鍙傛暟
-     * @return
-     */
-    public static List<Object> scan(String query) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
         Set<String> resultKeys = (Set<String>) redisTemplate.execute((RedisCallback<Set<String>>) connection -> {
             ScanOptions scanOptions = ScanOptions.scanOptions().match("*" + query + "*").count(1000).build();
             Cursor<byte[]> scan = connection.scan(scanOptions);
@@ -881,19 +40,7 @@
 
         return new ArrayList<>(resultKeys);
     }
-    public static List<Object> scan2(String query) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        Set<String> keys = redisTemplate.keys(query);
-        return new ArrayList<>(keys);
-    }
-    //    ============================== 娑堟伅鍙戦�佷笌璁㈤槄 ==============================
-    public static void convertAndSend(String channel, JSONObject msg) {
-        if (redisTemplate == null) {
-            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
-        }
-        redisTemplate.convertAndSend(channel, msg);
-    }
-
 }
+
+
+
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil2.java b/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil2.java
new file mode 100644
index 0000000..50d13d4
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil2.java
@@ -0,0 +1,899 @@
+package com.genersoft.iot.vmp.utils.redis;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.genersoft.iot.vmp.utils.SpringBeanFactory;
+import org.springframework.data.redis.core.*;
+import org.springframework.util.CollectionUtils;
+
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+
+/**    
+ * Redis宸ュ叿绫�
+ * @author swwheihei
+ * @date 2020骞�5鏈�6鏃� 涓嬪崍8:27:29
+ */
+@SuppressWarnings(value = {"rawtypes", "unchecked"})
+public class RedisUtil2 {
+
+    private static RedisTemplate redisTemplate;
+
+    static {
+        redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+    }
+
+	/**
+     * 鎸囧畾缂撳瓨澶辨晥鏃堕棿
+     * @param key 閿�
+     * @param time 鏃堕棿锛堢锛�
+     * @return true / false
+     */
+    public static boolean expire(String key, long time) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        try {
+            if (time > 0) {
+                redisTemplate.expire(key, time, TimeUnit.SECONDS);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 鏍规嵁 key 鑾峰彇杩囨湡鏃堕棿
+     * @param key 閿�
+     */
+    public static long getExpire(String key) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        return redisTemplate.getExpire(key, TimeUnit.SECONDS);
+    }
+
+    /**
+     * 鍒ゆ柇 key 鏄惁瀛樺湪
+     * @param key 閿�
+     * @return true / false
+     */
+    public static boolean hasKey(String key) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        try {
+            return redisTemplate.hasKey(key);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 鍒犻櫎缂撳瓨
+     * @SuppressWarnings("unchecked") 蹇界暐绫诲瀷杞崲璀﹀憡
+     * @param key 閿紙涓�涓垨鑰呭涓級
+     */
+    public static boolean del(String... key) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+    	try {
+    		if (key != null && key.length > 0) {
+                if (key.length == 1) {
+                    redisTemplate.delete(key[0]);
+                } else {
+//                    浼犲叆涓�涓� Collection<String> 闆嗗悎
+                    redisTemplate.delete(CollectionUtils.arrayToList(key));
+                }
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+//    ============================== String ==============================
+
+    /**
+     * 鏅�氱紦瀛樿幏鍙�
+     * @param key 閿�
+     * @return 鍊�
+     */
+    public static Object get(String key) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        return key == null ? null : redisTemplate.opsForValue().get(key);
+    }
+
+    /**
+     * 鏅�氱紦瀛樻斁鍏�
+     * @param key 閿�
+     * @param value 鍊�
+     * @return true / false
+     */
+    public static boolean set(String key, Object value) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        try {
+            redisTemplate.opsForValue().set(key, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 鏅�氱紦瀛樻斁鍏ュ苟璁剧疆鏃堕棿
+     * @param key 閿�
+     * @param value 鍊�
+     * @param time 鏃堕棿锛堢锛夛紝濡傛灉 time < 0 鍒欒缃棤闄愭椂闂�
+     * @return true / false
+     */
+    public static boolean set(String key, Object value, long time) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        try {
+            if (time > 0) {
+                redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
+            } else {
+                set(key, value);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 閫掑
+     * @param key 閿�
+     * @param delta 閫掑澶у皬
+     * @return
+     */
+    public static long incr(String key, long delta) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        if (delta < 0) {
+            throw new RuntimeException("閫掑鍥犲瓙蹇呴』澶т簬 0");
+        }
+        return redisTemplate.opsForValue().increment(key, delta);
+    }
+
+    /**
+     * 閫掑噺
+     * @param key 閿�
+     * @param delta 閫掑噺澶у皬
+     * @return
+     */
+    public static long decr(String key, long delta) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        if (delta < 0) {
+            throw new RuntimeException("閫掑噺鍥犲瓙蹇呴』澶т簬 0");
+        }
+        return redisTemplate.opsForValue().increment(key, delta);
+    }
+
+//    ============================== Map ==============================
+
+    /**
+     * HashGet
+     * @param key 閿紙no null锛�
+     * @param item 椤癸紙no null锛�
+     * @return 鍊�
+     */
+    public static Object hget(String key, String item) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        return redisTemplate.opsForHash().get(key, item);
+    }
+
+    /**
+     * 鑾峰彇 key 瀵瑰簲鐨� map
+     * @param key 閿紙no null锛�
+     * @return 瀵瑰簲鐨勫涓敭鍊�
+     */
+    public static Map<Object, Object> hmget(String key) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        return redisTemplate.opsForHash().entries(key);
+    }
+
+    /**
+     * HashSet
+     * @param key 閿�
+     * @param map 鍊�
+     * @return true / false
+     */
+    public static boolean hmset(String key, Map<Object, Object> map) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        try {
+            redisTemplate.opsForHash().putAll(key, map);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * HashSet 骞惰缃椂闂�
+     * @param key 閿�
+     * @param map 鍊�
+     * @param time 鏃堕棿
+     * @return true / false
+     */
+    public static boolean hmset(String key, Map<?, ?> map, long time) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        try {
+            redisTemplate.opsForHash().putAll(key, map);
+            if (time > 0) {
+                expire(key, time);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 鍚戜竴寮� Hash琛� 涓斁鍏ユ暟鎹紝濡備笉瀛樺湪鍒欏垱寤�
+     * @param key 閿�
+     * @param item 椤�
+     * @param value 鍊�
+     * @return true / false
+     */
+    public static boolean hset(String key, String item, Object value) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        try {
+            redisTemplate.opsForHash().put(key, item, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 鍚戜竴寮� Hash琛� 涓斁鍏ユ暟鎹紝骞惰缃椂闂达紝濡備笉瀛樺湪鍒欏垱寤�
+     * @param key 閿�
+     * @param item 椤�
+     * @param value 鍊�
+     * @param time 鏃堕棿锛堝鏋滃師鏉ョ殑 Hash琛� 璁剧疆浜嗘椂闂达紝杩欓噷浼氳鐩栵級
+     * @return true / false
+     */
+    public static boolean hset(String key, String item, Object value, long time) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        try {
+            redisTemplate.opsForHash().put(key, item, value);
+            if (time > 0) {
+                expire(key, time);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 鍒犻櫎 Hash琛� 涓殑鍊�
+     * @param key 閿�
+     * @param item 椤癸紙鍙互澶氫釜锛宯o null锛�
+     */
+    public static void hdel(String key, Object... item) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        redisTemplate.opsForHash().delete(key, item);
+    }
+
+    /**
+     * 鍒ゆ柇 Hash琛� 涓槸鍚︽湁璇ラ敭鐨勫��
+     * @param key 閿紙no null锛�
+     * @param item 鍊硷紙no null锛�
+     * @return true / false
+     */
+    public static boolean hHasKey(String key, String item) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        return redisTemplate.opsForHash().hasKey(key, item);
+    }
+
+    /**
+     * Hash閫掑锛屽鏋滀笉瀛樺湪鍒欏垱寤轰竴涓紝骞舵妸鏂板鐨勫�艰繑鍥�
+     * @param key 閿�
+     * @param item 椤�
+     * @param by 閫掑澶у皬 > 0
+     * @return
+     */
+    public static Double hincr(String key, String item, Double by) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        return redisTemplate.opsForHash().increment(key, item, by);
+    }
+
+    /**
+     * Hash閫掑噺
+     * @param key 閿�
+     * @param item 椤�
+     * @param by 閫掑噺澶у皬
+     * @return
+     */
+    public static Double hdecr(String key, String item, Double by) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        return redisTemplate.opsForHash().increment(key, item, -by);
+    }
+
+//    ============================== Set ==============================
+
+    /**
+     * 鏍规嵁 key 鑾峰彇 set 涓殑鎵�鏈夊��
+     * @param key 閿�
+     * @return 鍊�
+     */
+    public static Set<Object> sGet(String key) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        try {
+            return redisTemplate.opsForSet().members(key);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * 浠庨敭涓� key 鐨� set 涓紝鏍规嵁 value 鏌ヨ鏄惁瀛樺湪
+     * @param key 閿�
+     * @param value 鍊�
+     * @return true / false
+     */
+    public static boolean sHasKey(String key, Object value) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        try {
+            return redisTemplate.opsForSet().isMember(key, value);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 灏嗘暟鎹斁鍏� set缂撳瓨
+     * @param key 閿��
+     * @param values 鍊硷紙鍙互澶氫釜锛�
+     * @return 鎴愬姛涓暟
+     */
+    public static long sSet(String key, Object... values) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        try {
+            return redisTemplate.opsForSet().add(key, values);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+    /**
+     * 灏嗘暟鎹斁鍏� set缂撳瓨锛屽苟璁剧疆鏃堕棿
+     * @param key 閿�
+     * @param time 鏃堕棿
+     * @param values 鍊硷紙鍙互澶氫釜锛�
+     * @return 鎴愬姛鏀惧叆涓暟
+     */
+    public static long sSet(String key, long time, Object... values) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        try {
+            long count = redisTemplate.opsForSet().add(key, values);
+            if (time > 0) {
+                expire(key, time);
+            }
+            return count;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+    /**
+     * 鑾峰彇 set缂撳瓨鐨勯暱搴�
+     * @param key 閿�
+     * @return 闀垮害
+     */
+    public static long sGetSetSize(String key) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        try {
+            return redisTemplate.opsForSet().size(key);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+    /**
+     * 绉婚櫎 set缂撳瓨涓紝鍊间负 value 鐨�
+     * @param key 閿�
+     * @param values 鍊�
+     * @return 鎴愬姛绉婚櫎涓暟
+     */
+    public static long setRemove(String key, Object... values) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        try {
+            return redisTemplate.opsForSet().remove(key, values);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+//    ============================== ZSet ==============================
+
+    /**
+     * 娣诲姞涓�涓厓绱�, zset涓巗et鏈�澶х殑鍖哄埆灏辨槸姣忎釜鍏冪礌閮芥湁涓�涓猻core锛屽洜姝ゆ湁涓帓搴忕殑杈呭姪鍔熻兘;  zadd
+     *
+     * @param key
+     * @param value
+     * @param score
+     */
+    public static void zAdd(Object key, Object value, double score) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        redisTemplate.opsForZSet().add(key, value, score);
+    }
+
+    /**
+     * 鍒犻櫎鍏冪礌 zrem
+     *
+     * @param key
+     * @param value
+     */
+    public static void zRemove(Object key, Object value) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        redisTemplate.opsForZSet().remove(key, value);
+    }
+
+    /**
+     * score鐨勫鍔爋r鍑忓皯 zincrby
+     *
+     * @param key
+     * @param value
+     * @param delta -1 琛ㄧず鍑� 1 琛ㄧず鍔�1
+     */
+    public static Double zIncrScore(Object key, Object value, double delta) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        return redisTemplate.opsForZSet().incrementScore(key, value, delta);
+    }
+
+    /**
+     * 鏌ヨvalue瀵瑰簲鐨剆core   zscore
+     *
+     * @param key
+     * @param value
+     * @return
+     */
+    public static Double zScore(Object key, Object value) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        return redisTemplate.opsForZSet().score(key, value);
+    }
+
+    /**
+     * 鍒ゆ柇value鍦▃set涓殑鎺掑悕  zrank
+     *
+     * @param key
+     * @param value
+     * @return
+     */
+    public static Long zRank(Object key, Object value) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        return redisTemplate.opsForZSet().rank(key, value);
+    }
+
+    /**
+     * 杩斿洖闆嗗悎鐨勯暱搴�
+     *
+     * @param key
+     * @return
+     */
+    public static Long zSize(Object key) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        return redisTemplate.opsForZSet().zCard(key);
+    }
+
+    /**
+     * 鏌ヨ闆嗗悎涓寚瀹氶『搴忕殑鍊硷紝 0 -1 琛ㄧず鑾峰彇鍏ㄩ儴鐨勯泦鍚堝唴瀹�  zrange
+     *
+     * 杩斿洖鏈夊簭鐨勯泦鍚堬紝score灏忕殑鍦ㄥ墠闈�
+     *
+     * @param key
+     * @param start
+     * @param end
+     * @return
+     */
+    public static Set<Object> zRange(Object key, int start, int end) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        return redisTemplate.opsForZSet().range(key, start, end);
+    }
+    /**
+     * 鏌ヨ闆嗗悎涓寚瀹氶『搴忕殑鍊煎拰score锛�0, -1 琛ㄧず鑾峰彇鍏ㄩ儴鐨勯泦鍚堝唴瀹�
+     *
+     * @param key
+     * @param start
+     * @param end
+     * @return
+     */
+    public static Set<ZSetOperations.TypedTuple<String>> zRangeWithScore(Object key, int start, int end) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        return redisTemplate.opsForZSet().rangeWithScores(key, start, end);
+    }
+    /**
+     * 鏌ヨ闆嗗悎涓寚瀹氶『搴忕殑鍊�  zrevrange
+     *
+     * 杩斿洖鏈夊簭鐨勯泦鍚堜腑锛宻core澶х殑鍦ㄥ墠闈�
+     *
+     * @param key
+     * @param start
+     * @param end
+     * @return
+     */
+    public static Set<String> zRevRange(Object key, int start, int end) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        return redisTemplate.opsForZSet().reverseRange(key, start, end);
+    }
+    /**
+     * 鏍规嵁score鐨勫�硷紝鏉ヨ幏鍙栨弧瓒虫潯浠剁殑闆嗗悎  zrangebyscore
+     *
+     * @param key
+     * @param min
+     * @param max
+     * @return
+     */
+    public static Set<String> zSortRange(Object key, int min, int max) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        return redisTemplate.opsForZSet().rangeByScore(key, min, max);
+    }
+
+
+//    ============================== List ==============================
+
+    /**
+     * 鑾峰彇 list缂撳瓨鐨勫唴瀹�
+     * @param key 閿�
+     * @param start 寮�濮�
+     * @param end 缁撴潫锛�0 鍒� -1 浠h〃鎵�鏈夊�硷級
+     * @return
+     */
+    public static List<Object> lGet(String key, long start, long end) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        try {
+            return redisTemplate.opsForList().range(key, start, end);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * 鑾峰彇 list缂撳瓨鐨勯暱搴�
+     * @param key 閿�
+     * @return 闀垮害
+     */
+    public static long lGetListSize(String key) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        try {
+            return redisTemplate.opsForList().size(key);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+    /**
+     * 鏍规嵁绱㈠紩 index 鑾峰彇閿负 key 鐨� list 涓殑鍏冪礌
+     * @param key 閿�
+     * @param index 绱㈠紩
+     *              褰� index >= 0 鏃� {0:琛ㄥご, 1:绗簩涓厓绱爙
+     *              褰� index < 0 鏃� {-1:琛ㄥ熬, -2:鍊掓暟绗簩涓厓绱爙
+     * @return 鍊�
+     */
+    public static Object lGetIndex(String key, long index) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        try {
+            return redisTemplate.opsForList().index(key, index);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * 灏嗗�� value 鎻掑叆閿负 key 鐨� list 涓紝濡傛灉 list 涓嶅瓨鍦ㄥ垯鍒涘缓绌� list
+     * @param key 閿�
+     * @param value 鍊�
+     * @return true / false
+     */
+    public static boolean lSet(String key, Object value) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        try {
+            redisTemplate.opsForList().rightPush(key, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 灏嗗�� value 鎻掑叆閿负 key 鐨� list 涓紝骞惰缃椂闂�
+     * @param key 閿�
+     * @param value 鍊�
+     * @param time 鏃堕棿
+     * @return true / false
+     */
+    public static boolean lSet(String key, Object value, long time) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        try {
+            redisTemplate.opsForList().rightPush(key, value);
+            if (time > 0) {
+                expire(key, time);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 灏� values 鎻掑叆閿负 key 鐨� list 涓�
+     * @param key 閿�
+     * @param values 鍊�
+     * @return true / false
+     */
+    public static boolean lSetList(String key, List<Object> values) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        try {
+            redisTemplate.opsForList().rightPushAll(key, values);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 灏� values 鎻掑叆閿负 key 鐨� list 涓紝骞惰缃椂闂�
+     * @param key 閿�
+     * @param values 鍊�
+     * @param time 鏃堕棿
+     * @return true / false
+     */
+    public static boolean lSetList(String key, List<Object> values, long time) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        try {
+            redisTemplate.opsForList().rightPushAll(key, values);
+            if (time > 0) {
+                expire(key, time);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 鏍规嵁绱㈠紩 index 淇敼閿负 key 鐨勫��
+     * @param key 閿�
+     * @param index 绱㈠紩
+     * @param value 鍊�
+     * @return true / false
+     */
+    public static boolean lUpdateIndex(String key, long index, Object value) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        try {
+            redisTemplate.opsForList().set(key, index, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 鍦ㄩ敭涓� key 鐨� list 涓垹闄ゅ�间负 value 鐨勫厓绱�
+     * @param key 閿�
+     * @param count 濡傛灉 count == 0 鍒欏垹闄� list 涓墍鏈夊�间负 value 鐨勫厓绱�
+     *              濡傛灉 count > 0 鍒欏垹闄� list 涓渶宸﹁竟閭d釜鍊间负 value 鐨勫厓绱�
+     *              濡傛灉 count < 0 鍒欏垹闄� list 涓渶鍙宠竟閭d釜鍊间负 value 鐨勫厓绱�
+     * @param value
+     * @return
+     */
+    public static long lRemove(String key, long count, Object value) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        try {
+            return redisTemplate.opsForList().remove(key, count, value);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+    /**
+     * 鍦ㄩ敭涓� key 鐨� list涓Щ闄ょ涓�涓厓绱�
+     * @param key 閿�
+     * @return
+     */
+    public static Object lLeftPop(String key) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        return redisTemplate.opsForList().leftPop(key);
+    }
+
+    /**
+     * 鍦ㄩ敭涓� key 鐨� list涓Щ闄ゃ�佹渶鍚庝竴涓厓绱�
+     * @param key 閿�
+     * @return
+     */
+    public static Object lrightPop(String key) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        return redisTemplate.opsForList().rightPop(key);
+    }
+
+    /**
+     * 妯$硦鏌ヨ
+     * @param key 閿�
+     * @return true / false
+     */
+    public static List<Object> keys(String key) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        try {
+            Set<String> set = redisTemplate.keys(key);
+            return new ArrayList<>(set);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+
+    /**
+     * 妯$硦鏌ヨ
+     * @param query 鏌ヨ鍙傛暟
+     * @return
+     */
+//    public static List<Object> scan(String query) {
+//        List<Object> result = new ArrayList<>();
+//        try {
+//            Cursor<Map.Entry<Object,Object>> cursor = redisTemplate.opsForHash().scan("field",
+//                    ScanOptions.scanOptions().match(query).count(1000).build());
+//            while (cursor.hasNext()) {
+//                Map.Entry<Object,Object> entry = cursor.next();
+//                result.add(entry.getKey());
+//                Object key = entry.getKey();
+//                Object valueSet = entry.getValue();
+//            }
+//            //鍏抽棴cursor
+//            cursor.close();
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//        return result;
+//    }
+
+    /**
+     * 妯$硦鏌ヨ
+     * @param query 鏌ヨ鍙傛暟
+     * @return
+     */
+    public static List<Object> scan(String query) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        Set<String> resultKeys = (Set<String>) redisTemplate.execute((RedisCallback<Set<String>>) connection -> {
+            ScanOptions scanOptions = ScanOptions.scanOptions().match("*" + query + "*").count(1000).build();
+            Cursor<byte[]> scan = connection.scan(scanOptions);
+            Set<String> keys = new HashSet<>();
+            while (scan.hasNext()) {
+                byte[] next = scan.next();
+                keys.add(new String(next));
+            }
+            return keys;
+        });
+
+        return new ArrayList<>(resultKeys);
+    }
+    public static List<Object> scan2(String query) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        Set<String> keys = redisTemplate.keys(query);
+        return new ArrayList<>(keys);
+    }
+    //    ============================== 娑堟伅鍙戦�佷笌璁㈤槄 ==============================
+    public static void convertAndSend(String channel, JSONObject msg) {
+        if (redisTemplate == null) {
+            redisTemplate = SpringBeanFactory.getBean("redisTemplate");
+        }
+        redisTemplate.convertAndSend(channel, msg);
+    }
+
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/StreamContent.java b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/StreamContent.java
index e577baa..abf6df4 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/StreamContent.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/StreamContent.java
@@ -116,6 +116,9 @@
         if (streamInfo.getFmp4() != null) {
             this.fmp4 = streamInfo.getFmp4().getUrl();
         }
+        if (streamInfo.getHttps_fmp4() != null) {
+            this.https_fmp4 = streamInfo.getHttps_fmp4().getUrl();
+        }
         if (streamInfo.getWs_fmp4() != null) {
             this.ws_fmp4 = streamInfo.getWs_fmp4().getUrl();
         }

--
Gitblit v1.8.0