From 2f108a46d05e34981d52b447d73f0cfd8e8c30fd Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期三, 17 十一月 2021 16:24:31 +0800
Subject: [PATCH] Merge pull request #232 from chenparty/wvp-28181-2.0
---
src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java | 187 ++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 178 insertions(+), 9 deletions(-)
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 a03f9aa..35da678 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,22 +1,20 @@
package com.genersoft.iot.vmp.utils.redis;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.concurrent.TimeUnit;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.*;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
/**
- * @Description:Redis宸ュ叿绫�
- * @author: songww
+ * @description:Redis宸ュ叿绫�
+ * @author: swwheihei
* @date: 2020骞�5鏈�6鏃� 涓嬪崍8:27:29
*/
@Component
+@SuppressWarnings(value = {"rawtypes", "unchecked"})
public class RedisUtil {
@Autowired
@@ -389,6 +387,121 @@
return 0;
}
}
+// ============================== ZSet ==============================
+
+ /**
+ * 娣诲姞涓�涓厓绱�, zset涓巗et鏈�澶х殑鍖哄埆灏辨槸姣忎釜鍏冪礌閮芥湁涓�涓猻core锛屽洜姝ゆ湁涓帓搴忕殑杈呭姪鍔熻兘; zadd
+ *
+ * @param key
+ * @param value
+ * @param score
+ */
+ public void zAdd(Object key, Object value, double score) {
+ redisTemplate.opsForZSet().add(key, value, score);
+ }
+
+ /**
+ * 鍒犻櫎鍏冪礌 zrem
+ *
+ * @param key
+ * @param value
+ */
+ public void zRemove(Object key, Object value) {
+ redisTemplate.opsForZSet().remove(key, value);
+ }
+
+ /**
+ * score鐨勫鍔爋r鍑忓皯 zincrby
+ *
+ * @param key
+ * @param value
+ * @param delta -1 琛ㄧず鍑� 1 琛ㄧず鍔�1
+ */
+ public Double zIncrScore(Object key, Object value, double delta) {
+ return redisTemplate.opsForZSet().incrementScore(key, value, delta);
+ }
+
+ /**
+ * 鏌ヨvalue瀵瑰簲鐨剆core zscore
+ *
+ * @param key
+ * @param value
+ * @return
+ */
+ public Double zScore(Object key, Object value) {
+ return redisTemplate.opsForZSet().score(key, value);
+ }
+
+ /**
+ * 鍒ゆ柇value鍦▃set涓殑鎺掑悕 zrank
+ *
+ * @param key
+ * @param value
+ * @return
+ */
+ public Long zRank(Object key, Object value) {
+ return redisTemplate.opsForZSet().rank(key, value);
+ }
+
+ /**
+ * 杩斿洖闆嗗悎鐨勯暱搴�
+ *
+ * @param key
+ * @return
+ */
+ public Long zSize(Object key) {
+ return redisTemplate.opsForZSet().zCard(key);
+ }
+
+ /**
+ * 鏌ヨ闆嗗悎涓寚瀹氶『搴忕殑鍊硷紝 0 -1 琛ㄧず鑾峰彇鍏ㄩ儴鐨勯泦鍚堝唴瀹� zrange
+ *
+ * 杩斿洖鏈夊簭鐨勯泦鍚堬紝score灏忕殑鍦ㄥ墠闈�
+ *
+ * @param key
+ * @param start
+ * @param end
+ * @return
+ */
+ public Set<Object> ZRange(Object key, int start, int end) {
+ return redisTemplate.opsForZSet().range(key, start, end);
+ }
+ /**
+ * 鏌ヨ闆嗗悎涓寚瀹氶『搴忕殑鍊煎拰score锛�0, -1 琛ㄧず鑾峰彇鍏ㄩ儴鐨勯泦鍚堝唴瀹�
+ *
+ * @param key
+ * @param start
+ * @param end
+ * @return
+ */
+ public Set<ZSetOperations.TypedTuple<String>> zRangeWithScore(Object key, int start, int end) {
+ return redisTemplate.opsForZSet().rangeWithScores(key, start, end);
+ }
+ /**
+ * 鏌ヨ闆嗗悎涓寚瀹氶『搴忕殑鍊� zrevrange
+ *
+ * 杩斿洖鏈夊簭鐨勯泦鍚堜腑锛宻core澶х殑鍦ㄥ墠闈�
+ *
+ * @param key
+ * @param start
+ * @param end
+ * @return
+ */
+ public Set<String> zRevRange(Object key, int start, int end) {
+ return redisTemplate.opsForZSet().reverseRange(key, start, end);
+ }
+ /**
+ * 鏍规嵁score鐨勫�硷紝鏉ヨ幏鍙栨弧瓒虫潯浠剁殑闆嗗悎 zrangebyscore
+ *
+ * @param key
+ * @param min
+ * @param max
+ * @return
+ */
+ public Set<String> zSortRange(Object key, int min, int max) {
+ return redisTemplate.opsForZSet().rangeByScore(key, min, max);
+ }
+
// ============================== List ==============================
@@ -545,7 +658,7 @@
return 0;
}
}
-
+
/**
* 妯$硦鏌ヨ
* @param key 閿�
@@ -553,11 +666,67 @@
*/
public List<Object> keys(String key) {
try {
- Set<String> set = redisTemplate.keys(key);
+ Set<String> set = redisTemplate.keys(key);
return new ArrayList<>(set);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
+
+
+ /**
+ * 妯$硦鏌ヨ
+ * @param query 鏌ヨ鍙傛暟
+ * @return
+ */
+// public 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 List<Object> scan(String query) {
+ Set<String> keys = (Set<String>) redisTemplate.execute((RedisCallback<Set<String>>) connection -> {
+ Set<String> keysTmp = new HashSet<>();
+ Cursor<byte[]> cursor = connection.scan(new ScanOptions.ScanOptionsBuilder().match(query).count(1000).build());
+ while (cursor.hasNext()) {
+ keysTmp.add(new String(cursor.next()));
+ }
+ return keysTmp;
+ });
+// Set<String> keys = (Set<String>) redisTemplate.execute(new RedisCallback<Set<String>>(){
+//
+// @Override
+// public Set<String> doInRedis(RedisConnection connection) throws DataAccessException {
+// Set<String> keysTmp = new HashSet<>();
+// Cursor<byte[]> cursor = connection.scan(new ScanOptions.ScanOptionsBuilder().match(query).count(1000).build());
+// while (cursor.hasNext()) {
+// keysTmp.add(new String(cursor.next()));
+// }
+// return keysTmp;
+// }
+// });
+
+ return new ArrayList<>(keys);
+ }
+
}
--
Gitblit v1.8.0