RedisLockUtil.java 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package com.izouma.nineth.utils;
  2. import com.izouma.nineth.redis.SpringRedisUtils;
  3. import java.util.Collections;
  4. import java.util.UUID;
  5. /**
  6. * Created by shma on 2018/8/29.
  7. */
  8. public final class RedisLockUtil {
  9. private static final int DEFAULT_EXPIRE = 60;
  10. private static final String SCRIPT =
  11. "if redis.call(\"get\",KEYS[1]) == ARGV[1]\n"
  12. + "then\n"
  13. + " return redis.call(\"del\",KEYS[1])\n"
  14. + "else\n"
  15. + " return 0\n"
  16. + "end";
  17. private RedisLockUtil() {
  18. super();
  19. }
  20. /**
  21. *
  22. * @param key 锁的key
  23. * @return 返回value为null,则锁失败,不为null则锁成功
  24. */
  25. public static String lock(String key) {
  26. return lock(key, DEFAULT_EXPIRE);
  27. }
  28. public static boolean lock(String key, String value) {
  29. return lock(key, value, DEFAULT_EXPIRE);
  30. }
  31. public static String lock(String key, long expire) {
  32. String value = UUID.randomUUID().toString();
  33. boolean nx = SpringRedisUtils.setNX(key, value, expire);
  34. return nx ? value : null;
  35. }
  36. public static boolean lock(String key, String value, long expire) {
  37. return SpringRedisUtils.setNX(key, value, expire);
  38. }
  39. public static void unLock(String key, String value) {
  40. SpringRedisUtils.lua(SCRIPT, Collections.singletonList(key), Collections.singletonList(value));
  41. }
  42. }