From 880923102d91ea31315ac67d292e72d9f60ac68c Mon Sep 17 00:00:00 2001
From: wangting <675591594@qq.com>
Date: 星期五, 21 六月 2024 17:29:43 +0800
Subject: [PATCH] 修改样式
---
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/redis/RedisService.java | 361 +++++++++++++++++++++++++++++++++++++-------------
1 files changed, 264 insertions(+), 97 deletions(-)
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/redis/RedisService.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/redis/RedisService.java
index e7a5a8e..ed55283 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/redis/RedisService.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/redis/RedisService.java
@@ -1,25 +1,28 @@
package com.vci.web.redis;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.BoundSetOperations;
-import org.springframework.data.redis.core.HashOperations;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.core.ValueOperations;
+import org.springframework.data.geo.Distance;
+import org.springframework.data.geo.Metrics;
+import org.springframework.data.geo.Point;
+import org.springframework.data.redis.core.*;
+import org.springframework.data.redis.core.script.DefaultRedisScript;
+import org.springframework.data.redis.core.script.RedisScript;
+import org.springframework.data.redis.serializer.RedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
/**
* spring redis 宸ュ叿绫�
- *
- * @author wang1
+ * @author dangsn
**/
@SuppressWarnings(value = { "unchecked", "rawtypes" })
@Component
+@Slf4j
public class RedisService
{
@Autowired(required = false)
@@ -31,8 +34,7 @@
* @param key 缂撳瓨鐨勯敭鍊�
* @param value 缂撳瓨鐨勫��
*/
- public <T> void setCacheObject(final String key, final T value)
- {
+ public <T> void setCacheObject(final String key, final T value) {
redisTemplate.opsForValue().set(key, value);
}
@@ -44,8 +46,7 @@
* @param timeout 鏃堕棿
* @param timeUnit 鏃堕棿棰楃矑搴�
*/
- public <T> void setCacheObject(final String key, final T value, final Long timeout, final TimeUnit timeUnit)
- {
+ public <T> void setCacheObject(final String key, final T value, final Long timeout, final TimeUnit timeUnit) {
redisTemplate.opsForValue().set(key, value, timeout, timeUnit);
}
@@ -69,8 +70,7 @@
* @param unit 鏃堕棿鍗曚綅
* @return true=璁剧疆鎴愬姛锛沠alse=璁剧疆澶辫触
*/
- public boolean expire(final String key, final long timeout, final TimeUnit unit)
- {
+ public boolean expire(final String key, final long timeout, final TimeUnit unit) {
return redisTemplate.expire(key, timeout, unit);
}
@@ -91,8 +91,7 @@
* @param key 閿�
* @return true 瀛樺湪 false涓嶅瓨鍦�
*/
- public Boolean hasKey(String key)
- {
+ public Boolean hasKey(String key) {
return redisTemplate.hasKey(key);
}
@@ -102,8 +101,7 @@
* @param key 缂撳瓨閿��
* @return 缂撳瓨閿�煎搴旂殑鏁版嵁
*/
- public <T> T getCacheObject(final String key)
- {
+ public <T> T getCacheObject(final String key) {
ValueOperations<String, T> operation = redisTemplate.opsForValue();
return operation.get(key);
}
@@ -111,7 +109,8 @@
/**
* 鍒犻櫎鍗曚釜瀵硅薄
*
- * @param key
+ * @param key 鍙互
+ * @return 鍒犻櫎鏄惁鎴愬姛
*/
public boolean deleteObject(final String key)
{
@@ -122,7 +121,7 @@
* 鍒犻櫎闆嗗悎瀵硅薄
*
* @param collection 澶氫釜瀵硅薄
- * @return
+ * @return 鍒犻櫎鐨勪釜鏁�
*/
public long deleteObject(final Collection collection)
{
@@ -130,50 +129,14 @@
}
/**
- * list鐨勯暱搴�
- *
- * @param key 缂撳瓨鐨勯敭鍊�
- * @return 缂撳瓨鐨勫璞�
- */
- public <T> Long listSize(final String key)
- {
- return redisTemplate.opsForList().size(key);
- }
-
- /**
- * 浠庡乏杈瑰彇鍑轰竴涓猯ist鍏冪礌
- *
- * @param key 缂撳瓨鐨勯敭鍊�
- * @return 缂撳瓨鐨勫璞�
- */
- public <T> Object leftPop(final String key)
- {
- return redisTemplate.opsForList().leftPop(key);
- }
-
- /**
- * 浠庡彸杈圭紦瀛楲ist鏁版嵁
+ * 缂撳瓨List鏁版嵁
*
* @param key 缂撳瓨鐨勯敭鍊�
* @param dataList 寰呯紦瀛樼殑List鏁版嵁
* @return 缂撳瓨鐨勫璞�
*/
- public <T> long setCacheList(final String key, final List<T> dataList)
- {
+ public <T> long setCacheList(final String key, final List<T> dataList) {
Long count = redisTemplate.opsForList().rightPushAll(key, dataList);
- return count == null ? 0 : count;
- }
-
- /**
- * 鍒犻櫎list涓厓绱爒alue
- * @param key
- * @param value
- * @param <T>
- * @return
- */
- public <T> long deleteCacheListByKeyAndValue(final String key, final T value)
- {
- Long count = redisTemplate.opsForList().remove(key,0,value);
return count == null ? 0 : count;
}
@@ -188,8 +151,6 @@
return redisTemplate.opsForList().range(key, 0, -1);
}
-
-
/**
* 缂撳瓨Set
*
@@ -197,36 +158,21 @@
* @param dataSet 缂撳瓨鐨勬暟鎹�
* @return 缂撳瓨鏁版嵁鐨勫璞�
*/
- public <T> BoundSetOperations<String, T> setCacheSet(final String key, final Set<T> dataSet)
- {
+ public <T> BoundSetOperations<String, T> setCacheSet(final String key, final Set<T> dataSet) {
BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key);
Iterator<T> it = dataSet.iterator();
while (it.hasNext())
{
setOperation.add(it.next());
}
- String i = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
- "<Datas>\n" +
- "\t<Data code=\"A1100012\" deptLevel=\"寮�鍙戦儴闂�#娴嬭瘯閮ㄩ棬\">\n" +
- "\t\t<prop sName=\"渚涘簲鍟嗗悕绉癨" tName =\"渚涘簲鍟嗗悕绉�1\" >\n" +
- "\t\t\t鍖椾含瀹忓崥杩滆揪绉戞妧鏈夐檺鍏徃2\n" +
- "\t\t</prop>\n" +
- "\t\t<prop sName=\"鎴峰ご\" tName =\"鎴峰ご1\">\n" +
- "\t\t\t1111100012\n" +
- "\t\t</prop>\n" +
- "\t\t<prop sName=\"鑱旂郴浜篭" tName=\"鑱旂郴浜�1\">\n" +
- "\t\t\t璋㈠啗2\n" +
- "\t\t</prop>\n" +
- "\t</Data>\n" +
- "</Datas>";
return setOperation;
}
/**
* 鑾峰緱缂撳瓨鐨剆et
*
- * @param key
- * @return
+ * @param key key
+ * @return 闆嗗悎鐨勫唴瀹�
*/
public <T> Set<T> getCacheSet(final String key)
{
@@ -236,11 +182,10 @@
/**
* 缂撳瓨Map
*
- * @param key
- * @param dataMap
+ * @param key key
+ * @param dataMap 鏁版嵁鏄犲皠
*/
- public <T> void setCacheMap(final String key, final Map<String, T> dataMap)
- {
+ public <T> void setCacheMap(final String key, final Map<String, T> dataMap) {
if (dataMap != null) {
redisTemplate.opsForHash().putAll(key, dataMap);
}
@@ -249,8 +194,8 @@
/**
* 鑾峰緱缂撳瓨鐨凪ap
*
- * @param key
- * @return
+ * @param key key
+ * @return 鏄犲皠
*/
public <T> Map<String, T> getCacheMap(final String key)
{
@@ -264,8 +209,7 @@
* @param hKey Hash閿�
* @param value 鍊�
*/
- public <T> void setCacheMapValue(final String key, final String hKey, final T value)
- {
+ public <T> void setCacheMapValue(final String key, final String hKey, final T value) {
redisTemplate.opsForHash().put(key, hKey, value);
}
@@ -276,8 +220,7 @@
* @param hKey Hash閿�
* @return Hash涓殑瀵硅薄
*/
- public <T> T getCacheMapValue(final String key, final String hKey)
- {
+ public <T> T getCacheMapValue(final String key, final String hKey) {
HashOperations<String, String, T> opsForHash = redisTemplate.opsForHash();
return opsForHash.get(key, hKey);
}
@@ -289,19 +232,243 @@
* @param hKeys Hash閿泦鍚�
* @return Hash瀵硅薄闆嗗悎
*/
- public <T> List<T> getMultiCacheMapValue(final String key, final Collection<Object> hKeys)
- {
+ public <T> List<T> getMultiCacheMapValue(final String key, final Collection<Object> hKeys) {
return redisTemplate.opsForHash().multiGet(key, hKeys);
}
/**
* 鑾峰緱缂撳瓨鐨勫熀鏈璞″垪琛�
- *
+ *
* @param pattern 瀛楃涓插墠缂�
* @return 瀵硅薄鍒楄〃
*/
- public Collection<String> keys(final String pattern)
- {
+ public Collection<String> keys(final String pattern) {
return redisTemplate.keys(pattern);
}
+
+ /**
+ * 璁剧疆鍒嗗竷寮忛攣
+ * @param key 閿佺殑key
+ * @param value 鍊�
+ * @return true琛ㄧず瀛樺湪锛宖alse琛ㄧず涓嶅瓨鍦�
+ */
+ public synchronized Boolean setNX(final String key, final String value) throws Exception{
+ Object obj = null;
+ try {
+ obj = redisTemplate.execute((RedisCallback<Object>) connection -> {
+ StringRedisSerializer serializer = new StringRedisSerializer();
+ Boolean success = connection.setNX(serializer.serialize(key), serializer.serialize(value));
+ connection.close();
+ return success;
+ });
+ } catch (Exception e) {
+ log.error("setNX redis error, key : {} - {}", key,e);
+ throw e;
+ }
+ return obj != null ? (Boolean) obj : false;
+ }
+
+ /**
+ * 璁剧疆鍒嗗竷寮忛攣锛岃秴鏃堕棿鍗曚綅绉�
+ * @param key 閿佺殑key
+ * @param value 鍊�
+ * @param timeOut 瓒呮椂鏃堕棿
+ * @return true琛ㄧず瀛樺湪锛宖alse琛ㄧず涓嶅瓨鍦�
+ */
+ public synchronized Boolean setNX(final String key, final String value,long timeOut) throws Exception {
+ boolean b = this.setNX(key,value);
+ redisTemplate.expire(key,timeOut,TimeUnit.SECONDS);
+ return b;
+ }
+
+ /**
+ * 鍒犻櫎閿�
+ * @param key 閿佺殑key
+ */
+ public void unlock(final String key) {
+ redisTemplate.delete(key);
+ }
+
+ /**
+ * 鑷噺 澶т簬绛変簬0
+ * @param key 閿佺殑key
+ * @return Boolean
+ */
+ public Boolean decrement(final String key) {
+ return redisTemplate.opsForValue().decrement(key) >= 0;
+ }
+ public Boolean decrement(final String key, long count) {
+ return redisTemplate.opsForValue().decrement(key,count) >= 0;
+ }
+
+ /**
+ * 鑷噺
+ * @param key 閿佺殑key
+ * @return Boolean
+ */
+ public Long decrementLong(final String key) {
+ return redisTemplate.opsForValue().decrement(key);
+ }
+ /**
+ * 鑷
+ * @param key 閿佺殑key
+ * @return Boolean
+ */
+ public Long increment(final String key) {
+ return redisTemplate.opsForValue().increment(key);
+ }
+ public Long increment(final String key, long count) {
+ return redisTemplate.opsForValue().increment(key,count);
+ }
+
+ /**
+ * 鍓嶇紑鍖归厤鍒犻櫎
+ * @param keyPrefix key鍓嶇紑
+ */
+ public Boolean deleteByPrefix(final String keyPrefix) {
+
+ List<String> list = new LinkedList<>();
+ ScanOptions build = ScanOptions.scanOptions().match(keyPrefix+":*").count(5000).build();
+ RedisSerializer<String> redisSerializer = redisTemplate.getKeySerializer();
+ Cursor cursor = (Cursor) redisTemplate.executeWithStickyConnection(redis -> new ConvertingCursor<>(redis.scan(build), redisSerializer::deserialize));
+
+ if (cursor != null){
+ try {
+ while ( cursor.hasNext()) {
+ list.add(cursor.next().toString());
+ }
+ try {
+ cursor.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ log.error("redis涓殑Cursor鍏抽棴澶辫触锛�");
+ }
+ } finally {
+ try {
+ cursor.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ Long delete = redisTemplate.delete(list);
+ log.info("鍒犻櫎鑿滃崟key: "+delete+"涓�俓n 璇︽儏:"+list.toString());
+ return delete > 0L;
+ }
+ return false;
+ }
+
+ /**
+ * 鍓嶇紑鍖归厤
+ * @param keyPrefix key鍓嶇紑
+ *
+ */
+ public <T> List<T> findKeysByPrefix(final String keyPrefix) {
+
+ List<T> list = new ArrayList<>();
+ ScanOptions build = ScanOptions.scanOptions().match(keyPrefix+":*").count(5000).build();
+ RedisSerializer<String> redisSerializer = redisTemplate.getKeySerializer();
+ Cursor cursor = (Cursor) redisTemplate.executeWithStickyConnection(redis -> new ConvertingCursor<>(redis.scan(build), redisSerializer::deserialize));
+ if (cursor != null){
+ try {
+ while (cursor.hasNext()) {
+ list.add(getCacheObject(cursor.next().toString()));
+ }
+ try {
+ cursor.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ } finally {
+ try {
+ cursor.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ return list;
+ }
+ return new ArrayList<>();
+ }
+
+
+ /**
+ * 鍩轰簬Lua鑴氭湰瀹炵幇鍘熷瓙鏌ヨ骞跺垹闄�
+ * @param key
+ * @return
+ */
+ public Boolean deleteLuaByKey(String key) {
+ String str2 = "if redis.call('EXISTS', KEYS[1]) == 1 then redis.call('DEL', KEYS[1]) return 1 else return 0 end";
+ RedisScript<Boolean> redisScript = new DefaultRedisScript<>(str2,Boolean.class);
+ Boolean execute = (Boolean) redisTemplate.execute(redisScript, Collections.singletonList(key));
+ return execute;
+ }
+ /**
+ * GEO 娣诲姞鏁版嵁(缁忕含搴�)
+ * @param key
+ * @return
+ */
+ public <T extends Point> void addGEO(String key, Map<String,T> map) {
+ redisTemplate.opsForGeo().add(key,map);
+ }
+
+ /**
+ * GEO 娣诲姞鏁版嵁(缁忕含搴�)
+ * @param key
+ * @return
+ */
+ public <T extends Point> void addGEO(String key, Point point, String member) {
+ redisTemplate.opsForGeo().add(key,point,member);
+ }
+
+
+ public <T extends Point> void removeGEO(String key,String... member) {
+ redisTemplate.opsForGeo().remove(key,member);
+ }
+
+
+ /**
+ * GEO 鏌ヨ璺濈
+ * @param point 闇�瑕佹煡璇㈢殑鍦板潃
+ * @param key 鍩庡競
+ * @param members 鑺傜偣
+ * @return map(鍟嗛摵,璺濈)
+ */
+ public Map<String,String> distanceGEO(Point point,String key, List<String> members) {
+ GeoOperations geo = redisTemplate.opsForGeo();
+ long l = System.currentTimeMillis();
+ String member = "geo"+l;
+ addGEO(key,point,member);
+ Map<String,String> map = new HashMap<>();
+ members.forEach(e->{
+ Distance distance = geo.distance(key, member, e, Metrics.KILOMETERS);
+ map.put(e,String.valueOf(distance.getValue()));
+ });
+ removeGEO(key,key,member);
+ return map;
+
+ }
+
+ /**
+ * 鑾峰彇List闆嗗悎鎿嶄綔
+ * @return 鎿嶄綔
+ */
+ public ListOperations opsForList(){
+ return this.redisTemplate.opsForList();
+ }
+
+ /**
+ * 鑾峰彇Set闆嗗悎鎿嶄綔
+ * @return 鎿嶄綔
+ */
+ public SetOperations opsForSet(){
+ return this.redisTemplate.opsForSet();
+ }
+
+ /**
+ * 鑾峰彇hash鎿嶄綔
+ * @return 鎿嶄綔
+ */
+ public HashOperations opsForHash(){
+ return this.redisTemplate.opsForHash();
+ }
}
--
Gitblit v1.9.3