From b21fb4c288c98971f9859cf5d85cef4c86e131bb Mon Sep 17 00:00:00 2001
From: nickchange <126672920+nickchange@users.noreply.github.com>
Date: 星期五, 08 十二月 2023 14:46:21 +0800
Subject: [PATCH] 12.8
---
cloud-server-other/src/main/java/com/dsh/other/util/RedisUtil.java | 90 +++++++++++++++++++++++++++++++++++++--------
1 files changed, 74 insertions(+), 16 deletions(-)
diff --git a/cloud-server-other/src/main/java/com/dsh/other/util/RedisUtil.java b/cloud-server-other/src/main/java/com/dsh/other/util/RedisUtil.java
index f84642d..d5f9ab2 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/util/RedisUtil.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/util/RedisUtil.java
@@ -21,15 +21,18 @@
@Autowired
private JedisPool jedisPool;
+ private static final int TIMEOUT = 10 * 1000; // 10秒超时时间
+ private static final int SLEEP_TIME = 1000; // 1秒休眠时间
/**
* 向redis中存储字符串没有过期时间
* Storing strings in Redis without an expiration time.
+ *
* @param key
* @param value
*/
- public void setStrValue(String key, String value){
- if(StringUtil.isNotEmpty(key)){
+ public void setStrValue(String key, String value) {
+ if (StringUtil.isNotEmpty(key)) {
Jedis resource = jedisPool.getResource();
String set = resource.set(key, value);
closeJedis(resource);
@@ -40,12 +43,13 @@
/**
* 以分钟为单位设置存储值(设置过期时间)
* Set storage value in minutes (set expiration time) as units.
+ *
* @param key
* @param value
- * @param time 秒
+ * @param time 秒
*/
- public void setStrValue(String key, String value, int time){
- if(StringUtil.isNotEmpty(key)){
+ public void setStrValue(String key, String value, int time) {
+ if (StringUtil.isNotEmpty(key)) {
Jedis resource = jedisPool.getResource();
String setex = resource.setex(key, time, value);
closeJedis(resource);
@@ -55,11 +59,12 @@
/**
* 从redis中获取值
+ *
* @param key
* @return
*/
- public String getValue(String key){
- if(StringUtil.isNotEmpty(key)){
+ public String getValue(String key) {
+ if (StringUtil.isNotEmpty(key)) {
Jedis resource = jedisPool.getResource();
String data = resource.get(key);
closeJedis(resource);
@@ -71,14 +76,15 @@
/**
* 批量获取
+ *
* @param kes
* @return
*/
- public List<Object> getValues(List<String> kes){
- if(null != kes){
+ public List<Object> getValues(List<String> kes) {
+ if (null != kes) {
Jedis resource = jedisPool.getResource();
Pipeline pipelined = resource.pipelined();
- for(String key : kes){
+ for (String key : kes) {
pipelined.get(key);
}
List<Object> list = pipelined.syncAndReturnAll();
@@ -91,8 +97,8 @@
e.printStackTrace();
}
List<Object> data = new ArrayList<>();
- for(Object o : list){
- if(null != o){
+ for (Object o : list) {
+ if (null != o) {
data.add(o);
}
}
@@ -104,10 +110,11 @@
/**
* 删除key
+ *
* @param key
*/
- public void remove(String key){
- if(StringUtil.isNotEmpty(key)){
+ public void remove(String key) {
+ if (StringUtil.isNotEmpty(key)) {
Jedis resource = jedisPool.getResource();
Long del = resource.del(key);
closeJedis(resource);
@@ -117,11 +124,62 @@
/**
* 删除资源
+ *
* @param jedis
*/
- public void closeJedis(Jedis jedis){
- if(null != jedis){
+ public void closeJedis(Jedis jedis) {
+ if (null != jedis) {
jedis.close();
}
}
+
+
+ public boolean acquireLock(String key, String value) {
+ Jedis jedis = null;
+ try {
+ jedis = jedisPool.getResource();
+ long start = System.currentTimeMillis();
+ String[] split = key.split(";");
+ for (String s : split) {
+
+ while (true) {
+ // 尝试获取锁
+ String result = jedis.set(s, value, "NX", "PX", TIMEOUT);
+ if ("OK".equals(result)) {
+ return true;
+ }
+ // 超时则返回失败
+ if (System.currentTimeMillis() - start > TIMEOUT) {
+ return false;
+ }
+ // 休眠一段时间后重试
+ Thread.sleep(SLEEP_TIME);
+ }
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ if (jedis != null) {
+ jedis.close();
+ }
+ }
+ return false;
+ }
+
+ public void releaseLock(String key) {
+ Jedis jedis = null;
+ try {
+ jedis = jedisPool.getResource();
+ jedis.del(key);
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ if (jedis != null) {
+ jedis.close();
+ }
+ }
+ }
+
+
}
--
Gitblit v1.7.1