RedisLockController.java 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package com.ruoyi.demo.controller;
  2. import com.ruoyi.common.annotation.RedisLock;
  3. import com.ruoyi.common.core.domain.AjaxResult;
  4. import com.ruoyi.common.core.redis.RedisLockManager;
  5. import lombok.extern.slf4j.Slf4j;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.web.bind.annotation.GetMapping;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.springframework.web.bind.annotation.RestController;
  10. import java.util.concurrent.TimeUnit;
  11. /**
  12. * 测试分布式锁的样例
  13. *
  14. * @author shenxinquan
  15. */
  16. @Slf4j
  17. @RestController
  18. @RequestMapping("/demo/redisLock")
  19. public class RedisLockController {
  20. @Autowired
  21. private RedisLockManager redisLockManager;
  22. /**
  23. * #p0 标识取第一个参数为redis锁的key
  24. */
  25. @GetMapping("/testLock1")
  26. @RedisLock(expireTime = 10, key = "#p0")
  27. public AjaxResult<String> testLock1(String key, String value) {
  28. try {
  29. // 同时请求排队
  30. // Thread.sleep(5000);
  31. // 锁超时测试
  32. Thread.sleep(11000);
  33. } catch (InterruptedException e) {
  34. e.printStackTrace();
  35. }
  36. return AjaxResult.success("操作成功",value);
  37. }
  38. /**
  39. * 测试锁工具类
  40. */
  41. @GetMapping("/testLock2")
  42. public AjaxResult<Void> testLock(String key, Long time) {
  43. try {
  44. boolean flag = redisLockManager.getLock(key, time, TimeUnit.SECONDS);
  45. if (flag) {
  46. log.info("获取锁成功: " + key);
  47. Thread.sleep(3000);
  48. redisLockManager.unLock();
  49. log.info("释放锁成功: " + key);
  50. } else {
  51. log.error("获取锁失败: " + key);
  52. }
  53. } catch (InterruptedException e) {
  54. log.error(e.getMessage());
  55. }
  56. return AjaxResult.success();
  57. }
  58. }