最近项目中,用到了redis分布式锁,使用过程有些心得,所以希望分享给大家。

      首先我们意识里要知道分布锁有哪些

      在传统单体应用单机部署的情况下,并发问题可以通过使用Java并发相关的锁如synchronized,但是当规模上升到分布式集群的情况下,要控制共享资源访问,就需要通过分布式锁来实现。

      当应用进行了分布式部署,应用有多个服务,这个时候应用服务端就没有一个可提供原子性操作的地方了,Redis性能高,且是单线程,因此可提供一个原子性操作的地方

      分布式锁一般分三种,基于数据库的乐观锁,基于redis的分布式锁,基于zookeper的分布式锁。本文只讲基于reids的分布式锁。

      为什么要用分布式锁

      传统项目很多都是单机的,基本上用不上分布式锁,但是当多机情况下,可能会引起不可控的并发问题。那么要解决这种情况,其实就需要用到分布式锁了。可以帮我们解决并发问题。

      redis分布式锁的底层原理

Redis分布式锁可以有多种方式实现但是其核心就是通过以下三个Redis命令组合实现。

  • SETNX SETNX key val 当且仅当key不存在时,set一个key为val的字符串,返回1;若key存在,则什么都不做,返回0。

  • Expire expire key timeout 为key设置一个超时时间,单位为second,超过这个时间锁会自动释放,避免死锁。

  • Delete delete key 删除key

核心思想

  • 使用setnx获取锁。如果成功取到锁,则使用expire命令为锁添加一个超时时间,超过该时间则自动释放锁。

  • 获取锁的时候还设置一个获取的超时时间,若超过这个时间则放弃获取锁。

     

     

     

版权声明:本文为zuoyi2319516228原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zuoyi2319516228/p/12165464.html