分布式锁原理

锁场景

  • 单机部署时,锁机制可用ReentrantLock可重入锁,或者用synchronized特殊字段锁住,高并发时推荐使用ReentrantLock,效率更高

  • 分布式部署时,因为需要布置多个服务器,不同服务器之间锁不互通,所以需要一个共同的中间件去达成锁的通信,推荐只用redis,当然还有数据库的悲观锁、乐观锁

redis分布式锁

  • 原理:setnx+expire,并开启事务(使其具有原子性),两项操作必须都执行成功,一项操作失败,另一项操作也需回退,执行完后del释放锁
  • 保证事务方法:使用lua脚本(经常使用在游戏上,效率非常高),该脚本拥有原子性
  • 上述分布式锁可能发生的问题
    • redis挂了========>可以高可用集群
    • 超时时间设置========>根据你的业务时间来进行配置
    • 业务时间>超时时间=========> 自动续钟(定义一个守护线程:查看锁的过期时间,如果发现锁要过期,但业务还没完成,则自动加时间)

使用redisson来实现

官方提供的redis分布式锁的实现

步骤

  • pom包引入redisson的实现
赏个🍗吧
0%