Redis分布式锁实现方案

在Java中,同一个JVM里面可以用synchronized关键字和ReentrantLock可重入锁解决多线程对同一资源的并发访问控制,但是随着分布式的快速发展,本地的加锁往往不能满足我们的需要,在我们的分布式环境中上面加锁的方法就会失去作用。

 

现在Spring Boot 分布式锁开箱即用,支持主流的 Redis、Zookeeper 中间件,另外还支持 JDBC(https://docs.spring.io/spring-integration/docs/5.3.1.RELEASE/reference/html/redis.html#redis-lock-registry),只需要添加三个依赖:

  • spring-boot-starter-data-redis
  • spring-boot-starter-integration
  • spring-integration-redis

然后只需要注入RedisLockRegistry,在需要分布式锁的场景:加锁-->处理业务逻辑-->释放锁(请注意甄别是否加的是同一把锁,特别是分布式部署应用时,确保能按顺序获取锁)。主要代码如下:

 

 

测试:5秒内分别访问下面两个连接,不同的请求按顺序获取了锁,按顺序处理了业务

http://localhost:8080/redis/lock1?key=goods_id1

http://localhost:8080/redis/lock2?key=goods_id1

 

 

关注公众号“一米源码”并发送“Lock”获取示例代码

posted on 2021-06-14 16:27  itproject-manager  阅读(74)  评论(0编辑  收藏  举报