pom.xml配置类package com.xmj.config; import lombok.Data; import org.redisson.Redisson; import org.redisson.api.RedissonClient; import org.redisson.config.Config; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; @Configuration @Data public class AppConfig { @Value("${spring.redis.host}") private String redisHost; @Value("${spring.redis.port}") private String redisPort; @Value("${spring.redis.password}") private String redisPwd; /** * 配置分布式锁 redisson * @return */ public RedissonClient redissonClient() { Config config = new Config(); //单机模式 config.useSingleServer().setPassword(redisPwd).setAddress("redis://" + redisHost + ":" + redisPort); //集群模式 //config.useClusterServers().addNodeAddress("redis://127.0.0.1:6379","redis://192.168.1.3:6379"); RedissonClient redissonClient = Redisson.create(config); return redissonClient; } } 测试方法 import com.xmj.service.CouponService; import com.xmj.utils.JsonData; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.concurrent.TimeUnit; /** * org.redisson redisson* 前端控制器 * * * @author xmj * @since 2021-12-30 */ @Api( tags = "优惠券模块") @RestController @RequestMapping("/api/coupon/v1") @Slf4j public class CouponController { @Autowired private CouponService couponService; @Autowired private RedissonClient redissonClient; @GetMapping("lock") public JsonData testLock() { RLock lock = redissonClient.getLock("lock:coupon:19"); //阻塞等待 //lock.lock(10, TimeUnit.SECONDS); //阻塞等待默认30s lock.lock(); try { log.info("加锁成功,处理业务逻辑…" + Thread.currentThread().getId()); TimeUnit.SECONDS.sleep(20); } catch (Exception e) { }finally { log.info("解锁成功,其他线程可以进去…" + Thread.currentThread().getId()); lock.unlock(); } return JsonData.buildSuccess(); } 起两个实例,同时请求,你会发现只有一个线程能进行下去,只有先加锁的释放锁,另外一个才能加锁。 实例12022-01-15 22:06:01.816 INFO 10408 --- [nio-9002-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet "dispatcherServlet" 2022-01-15 22:06:01.816 INFO 10408 --- [nio-9002-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet "dispatcherServlet" 2022-01-15 22:06:01.821 INFO 10408 --- [nio-9002-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 5 ms 2022-01-15 22:06:02.366 INFO 10408 --- [nio-9002-exec-2] com.xmj.controller.CouponController : 加锁成功,处理业务逻辑…51 2022-01-15 22:06:22.366 INFO 10408 --- [nio-9002-exec-2] com.xmj.controller.CouponController : 解锁成功,其他线程可以进去…51 实例22022-01-15 22:06:04.124 INFO 6876 --- [nio-9005-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet "dispatcherServlet" 2022-01-15 22:06:04.124 INFO 6876 --- [nio-9005-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet "dispatcherServlet" 2022-01-15 22:06:04.132 INFO 6876 --- [nio-9005-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 8 ms 2022-01-15 22:06:22.374 INFO 6876 --- [nio-9005-exec-2] com.xmj.controller.CouponController : 加锁成功,处理业务逻辑…48 2022-01-15 22:06:42.375 INFO 6876 --- [nio-9005-exec-2] com.xmj.controller.CouponController : 解锁成功,其他线程可以进去…48 分布式锁就此实现