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