关于redisson:Redisson-框架中的分布式锁
by emanjusaka from https://www.emanjusaka.top/2024/03/redisson-distributed-lock 彼岸花开可奈何本文欢送分享与聚合,全文转载请留下原文地址。实现分布式锁通常有三种形式:数据库、Redis 和 Zookeeper。咱们比拟罕用的是通过 Redis 和 Zookeeper 实现分布式锁。Redisson 框架中封装了通过 Redis 实现的分布式锁,上面咱们剖析一下它的具体实现。 关键点原子性 要么都胜利,要么都失败 过期工夫 如果锁还没来得及开释就遇到了服务宕机,就会呈现死锁的问题。给 Redis 的 key 设置过期工夫,即便服务宕机了超过设置的过期工夫锁会主动进行开释。 锁续期 因为给锁设置了过期工夫而咱们的业务逻辑具体要执行多长时间可能是变动和不确定的,如果设定了一个固定的过期工夫,可能会导致业务逻辑还没有执行完,锁被开释了的问题。锁续期能保障锁是在业务逻辑执行完才被开释。 正确开释锁 保障开释本人持有的锁,不能呈现 A 开释了 B 持有锁的状况。 Redis 实现分布式锁的几种部署形式单机 在这种部署形式中,Redis 的所有实例都部署在同一台服务器上。这种部署形式简单易行,但存在单点故障的危险。如果 Redis 实例宕机,则所有分布式锁都将生效。 哨兵 在这种部署形式中,Redis 的多个实例被配置为哨兵。哨兵负责监控 Redis 实例的状态,并在主实例宕机时主动选举一个新的主实例。这种部署形式能够提供更高的可用性和容错性。 集群 在这种部署形式中,Redis 的多个实例被配置为一个集群。集群中的每个实例都是平等的,并且能够解决读写操作。这种部署形式能够提供最高的可用性和容错性。 红锁 搞几个独立的 Master,比方 5 个,而后挨个加锁,只有超过一半以上(这里是 5/2+1=3 个)就代表加锁胜利,而后开释锁的时候也逐台开释。 应用形式引入依赖 <!-- pom.xml文件--><dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>3.17.7</version></dependency>版本依赖: redisson-spring-data module nameSpring Boot versionredisson-spring-data-161.3.yredisson-spring-data-171.4.yredisson-spring-data-181.5.yredisson-spring-data-2x2.x.yredisson-spring-data-3x3.x.yyml配置 spring: redis: redisson: config: singleServerConfig: address: redis://127.0.0.1:6379 database: 0 password: null timeout: 3000间接注入应用 ...