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) 编辑 收藏 举报