Browse Source

添加 withLock 为业务封装分布式锁,免去锁的获取、释放

James 3 years ago
parent
commit
540f38fa4f
1 changed files with 19 additions and 0 deletions
  1. 19 0
      src/main/java/com/jfinal/plugin/redis/Cache.java

+ 19 - 0
src/main/java/com/jfinal/plugin/redis/Cache.java

@@ -1461,6 +1461,25 @@ public class Cache {
 			close(jedis);
 		}
 	}
+
+	/**
+	 * 为业务封装分布式锁,免去锁的获取、释放
+	 * withLock("lockStock", 120, 1000, () -> {
+	 * 		// 业务操作代码
+	 * });
+	 */
+	public boolean withLock(String name, int secondsToExpire, long millisecondsToTimeout, com.jfinal.kit.Func.F00 fun) {
+		String lockId = Redis.use().lock(name, secondsToExpire, millisecondsToTimeout);
+		if (lockId == null) {
+			return false;
+		}
+		try {
+			fun.call();
+			return true;
+		} finally {
+			Redis.use().unlock("lockStock", lockId);
+		}
+	}
 }