redisson实现分布式锁

我就是我 2022-10-17 04:14 235阅读 0赞

1.配置类【以下实现均是本地实现】

  1. package com.springboot.redisdemo.bean;
  2. import org.redisson.Redisson;
  3. import org.redisson.api.RedissonClient;
  4. import org.redisson.config.Config;
  5. import org.springframework.context.annotation.Bean;
  6. import org.springframework.context.annotation.Configuration;
  7. import java.io.IOException;
  8. /** * @author lhp * @version 1.0 * @date 2021/1/25 14:24 */
  9. @Configuration
  10. public class MyRedissonConfig {
  11. @Bean(destroyMethod="shutdown")
  12. RedissonClient redisson() throws IOException {
  13. //1、创建配置
  14. Config config = new Config();
  15. config.useSingleServer()
  16. .setAddress("redis://127.0.0.1:6379");
  17. return Redisson.create(config);
  18. }
  19. }
  • 注意:这里有个问题,setAddress需要加
    redis:// 不然初始化的时候会报错。

2.实现

  1. package com.springboot.redisdemo.controller;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.redisson.api.RLock;
  4. import org.redisson.api.RedissonClient;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.web.bind.annotation.GetMapping;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.RestController;
  9. import java.util.concurrent.TimeUnit;
  10. /** * @Author lhp * @Date 2020/8/31 14:49 * @Version 1.0 * @Description */
  11. @Slf4j
  12. @RestController
  13. @RequestMapping("aaa")
  14. public class RedisController {
  15. private static final String KEY = "mylock";
  16. @Autowired
  17. private RedissonClient redissonClient;
  18. @GetMapping("/lock1")
  19. public String testLock1() {
  20. log.info("lock1 正在获取锁。。。。");
  21. RLock lock = redissonClient.getLock(KEY);
  22. lock.lock();
  23. log.info(Thread.currentThread().getName() + ":" + Thread.currentThread().getId() + " lock1 已经获取到锁");
  24. try {
  25. //模拟业务处理20s
  26. log.info("正在进行业务处理");
  27. TimeUnit.SECONDS.sleep(20);
  28. } catch (InterruptedException e) {
  29. e.printStackTrace();
  30. }
  31. lock.unlock();
  32. log.info(Thread.currentThread().getName() + ":" + Thread.currentThread().getId() + " lock1 已解锁");
  33. return "lock1";
  34. }
  35. @GetMapping("/lock2")
  36. public String testLoc2() {
  37. log.info("lock2 正在获取锁。。。。");
  38. RLock lock = redissonClient.getLock(KEY);
  39. lock.lock();
  40. log.info(Thread.currentThread().getName() + ":" + Thread.currentThread().getId() + " lock2 已经获取到锁");
  41. try {
  42. //模拟业务处理20s
  43. log.info("正在进行业务处理");
  44. TimeUnit.SECONDS.sleep(20);
  45. } catch (InterruptedException e) {
  46. e.printStackTrace();
  47. }
  48. lock.unlock();
  49. log.info(Thread.currentThread().getName() + ":" + Thread.currentThread().getId() + " lock2 已解锁");
  50. return "lock2";
  51. }
  52. }

3.测试结果

在这里插入图片描述

lock1 的redis key存储,此时是lock1的线程id
在这里插入图片描述

lock 2 的key 存储,此时已经更换为lock2的线程id在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,235人围观)

还没有评论,来说两句吧...

相关阅读

    相关 分布式Redisson实现

    分布式锁相信大家都已经听过了,常见的方案呢,也就那么几种,今天我们来讲讲使用Redisson框架来实现redis的分布式锁 那么第一个问题来了,为什么不直接使用redis,而