From f89ef3abf4f3210a6f768cc47644a99fee1a46f6 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期一, 03 四月 2023 15:06:08 +0800
Subject: [PATCH] 优化移动位置notify消息处理

---
 src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java                                 |    2 
 src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil2.java                                       | 1786 ++++++++++++++++++++++++++++----------------------------
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java   |   28 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java |    9 
 src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMobilePositionMapper.java                      |   11 
 5 files changed, 922 insertions(+), 914 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
index 990da3a..a0038ca 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
@@ -148,26 +148,30 @@
 
 			MobilePosition mobilePosition = new MobilePosition();
 			mobilePosition.setCreateTime(DateUtil.getNow());
+
 			Element deviceIdElement = rootElement.element("DeviceID");
 			String channelId = deviceIdElement.getTextTrim().toString();
 			Device device = redisCatchStorage.getDevice(deviceId);
 
 			if (device == null) {
-				// 鏍规嵁閫氶亾id鏌ヨ璁惧Id
-				List<Device> deviceList = deviceChannelService.getDeviceByChannelId(channelId);
-				if (deviceList.size() > 0) {
-					device = deviceList.get(0);
-				}else {
-					logger.warn("[mobilePosition绉诲姩浣嶇疆Notify] 鏈壘鍒伴�氶亾{}鎵�灞炵殑璁惧", channelId);
-					return;
+				device = redisCatchStorage.getDevice(channelId);
+				if (device == null) {
+					// 鏍规嵁閫氶亾id鏌ヨ璁惧Id
+					List<Device> deviceList = deviceChannelService.getDeviceByChannelId(channelId);
+					if (deviceList.size() > 0) {
+						device = deviceList.get(0);
+					}
 				}
 			}
-			if (device != null) {
-				if (!ObjectUtils.isEmpty(device.getName())) {
-					mobilePosition.setDeviceName(device.getName());
-				}
+			if (device == null) {
+				logger.warn("[mobilePosition绉诲姩浣嶇疆Notify] 鏈壘鍒伴�氶亾{}鎵�灞炵殑璁惧", channelId);
+				return;
 			}
-			mobilePosition.setDeviceId(XmlUtil.getText(rootElement, "DeviceID"));
+			if (!ObjectUtils.isEmpty(device.getName())) {
+				mobilePosition.setDeviceName(device.getName());
+			}
+
+			mobilePosition.setDeviceId(device.getDeviceId());
 			mobilePosition.setChannelId(channelId);
 			String time = XmlUtil.getText(rootElement, "Time");
 			mobilePosition.setTime(time);
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java
index 72da660..0c8c3f6 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java
@@ -81,7 +81,7 @@
         try {
             RequestEventExt evtExt = (RequestEventExt) evt;
             String requestAddress = evtExt.getRemoteIpAddress() + ":" + evtExt.getRemotePort();
-            logger.info("[娉ㄥ唽璇锋眰] 寮�濮嬪鐞�: {}", requestAddress);
+
 //            MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer();
 //            QueryExp protocol = Query.match(Query.attr("protocol"), Query.value("HTTP/1.1"));
 ////            ObjectName name = new ObjectName("*:type=Connector,*");
@@ -104,6 +104,7 @@
             AddressImpl address = (AddressImpl) fromHeader.getAddress();
             SipUri uri = (SipUri) address.getURI();
             String deviceId = uri.getUser();
+            logger.info("[娉ㄥ唽璇锋眰] 璁惧锛歿}, 寮�濮嬪鐞�: {}", deviceId, requestAddress);
             Device device = deviceService.getDevice(deviceId);
 
             RemoteAddressInfo remoteAddressInfo = SipUtils.getRemoteAddressFromRequest(request,
@@ -112,7 +113,7 @@
             if (device != null &&
                 device.getSipTransactionInfo() != null &&
                 request.getCallIdHeader().getCallId().equals(device.getSipTransactionInfo().getCallId())) {
-                logger.info("[娉ㄥ唽璇锋眰] 娉ㄥ唽缁: {}", device.getDeviceId());
+                logger.info("[娉ㄥ唽璇锋眰] 璁惧锛歿}, 娉ㄥ唽缁: {}",device.getDeviceId(), device.getDeviceId());
                 device.setExpires(request.getExpires().getExpires());
                 device.setIp(remoteAddressInfo.getIp());
                 device.setPort(remoteAddressInfo.getPort());
@@ -132,7 +133,7 @@
             String password = (device != null && !ObjectUtils.isEmpty(device.getPassword()))? device.getPassword() : sipConfig.getPassword();
             AuthorizationHeader authHead = (AuthorizationHeader) request.getHeader(AuthorizationHeader.NAME);
             if (authHead == null && !ObjectUtils.isEmpty(password)) {
-                logger.info("[娉ㄥ唽璇锋眰] 鍥炲401: {}", requestAddress);
+                logger.info("[娉ㄥ唽璇锋眰] 璁惧锛歿}, 鍥炲401: {}",deviceId, requestAddress);
                 response = getMessageFactory().createResponse(Response.UNAUTHORIZED, request);
                 new DigestServerAuthenticationHelper().generateChallenge(getHeaderFactory(), response, sipConfig.getDomain());
                 sipSender.transmitRequest(request.getLocalAddress().getHostAddress(), response);
@@ -147,7 +148,7 @@
                 // 娉ㄥ唽澶辫触
                 response = getMessageFactory().createResponse(Response.FORBIDDEN, request);
                 response.setReasonPhrase("wrong password");
-                logger.info("[娉ㄥ唽璇锋眰] 瀵嗙爜/SIP鏈嶅姟鍣↖D閿欒, 鍥炲403: {}", requestAddress);
+                logger.info("[娉ㄥ唽璇锋眰] 璁惧锛歿}, 瀵嗙爜/SIP鏈嶅姟鍣↖D閿欒, 鍥炲403: {}", deviceId, requestAddress);
                 sipSender.transmitRequest(request.getLocalAddress().getHostAddress(), response);
                 return;
             }
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 462ae3c..91f9bae 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
@@ -289,7 +289,7 @@
                 // 妫�鏌ユ槸鍚︽湁y瀛楁
                 if (ssrcIndex >= 0) {
                     //ssrc瑙勫畾闀垮害涓�10瀛楄妭锛屼笉鍙栦綑涓嬮暱搴︿互閬垮厤鍚庣画杩樻湁鈥渇=鈥濆瓧娈� TODO 鍚庣画瀵逛笉瑙勮寖鐨勯潪10浣峴src鍏煎
-                    String ssrcInResponse = contentString.substring(ssrcIndex + 2, ssrcIndex + 12);
+                    String ssrcInResponse = contentString.substring(ssrcIndex + 2, ssrcIndex + 12).trim();
                     // 鏌ヨ鍒皊src涓嶄竴鑷翠笖寮�鍚簡ssrc鏍¢獙鍒欓渶瑕侀拡瀵瑰鐞�
                     if (ssrcInfo.getSsrc().equals(ssrcInResponse)) {
                         return;
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMobilePositionMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMobilePositionMapper.java
index 358836c..3c77024 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMobilePositionMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMobilePositionMapper.java
@@ -1,15 +1,18 @@
 package com.genersoft.iot.vmp.storager.dao;
 
-import java.util.List;
-
 import com.genersoft.iot.vmp.gb28181.bean.MobilePosition;
-import org.apache.ibatis.annotations.*;
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
 
 @Mapper
 public interface DeviceMobilePositionMapper {
 
     @Insert("INSERT INTO device_mobile_position (deviceId,channelId, deviceName, time, longitude, latitude, altitude, speed, direction, reportSource, longitudeGcj02, latitudeGcj02, longitudeWgs84, latitudeWgs84, createTime) " +
-            "VALUES (#{deviceId},#{channelId}, #{deviceName}, #{time}, #{longitude}, #{latitude}, #{altitude}, #{speed}, #{direction}, #{reportSource}, #{longitudeGcj02}, #{latitudeGcj02}, #{longitudeWgs84}, #{latitudeWgs84}, #{createTime})")
+            "VALUES (#{deviceId}, #{channelId}, #{deviceName}, #{time}, #{longitude}, #{latitude}, #{altitude}, #{speed}, #{direction}, #{reportSource}, #{longitudeGcj02}, #{latitudeGcj02}, #{longitudeWgs84}, #{latitudeWgs84}, #{createTime})")
     int insertNewPosition(MobilePosition mobilePosition);
 
     @Select(value = {" <script>" +
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
index 50d13d4..18c1fd5 100644
--- a/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil2.java
+++ b/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil2.java
@@ -1,899 +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<>();
+//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 {
-//            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();
+//            if (time > 0) {
+//                redisTemplate.expire(key, time, TimeUnit.SECONDS);
 //            }
-//            //鍏抽棴cursor
-//            cursor.close();
+//            return true;
 //        } catch (Exception e) {
 //            e.printStackTrace();
+//            return false;
 //        }
-//        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);
-    }
-
-}
+//
+//    /**
+//     * 鏍规嵁 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);
+//    }
+//
+//}

--
Gitblit v1.8.0