• 前端
  • JS
  • CSS
  • HTML
  • Mysql
  • Linux
  • SVN
  • 环境uedbet官网手机版最新
  • uedbet西甲体育投注详解
  • MAC_BOOK
  • 算法
  • redis分布式锁
    By skyshappiness Posted 2022-11-20 17:35:28 In

    一、场景

           应用场景 秒杀、红包等高并发需要争抢服务器资源的时候,才需要使用


    二、分布式锁的特性

           互斥性:               任意时刻只有一个客户端持有锁

           锁超时释放:         持有锁超时,可以释放锁,防止死锁

           可重入性:            一个线程获取锁之后,可以再次请求对其加锁

           高可用、高性能:  加锁和解锁的开销需要尽可能的低,同时也要保证高可用

           安全性:               锁只能被持有它的客户端删除,不能被其他客户端删除


    三、redis分布式锁的实现方式

      忽略不可靠的版本:setnx + expire、setnx + value=expire。。。。。。

      基本可用也是常用的 分布式锁实现方式:

          set key uniqueval nx px expireTime

          当删除key的时候,先要 get key 判断 val 是否是之前自己设置的   uniqueval

      当然常用uedbet西甲体育投注也存在一定的缺陷,程序如果执行时间过长,而锁的过期时间过了的话,线程2就有可能会获得锁,并且执行

      通常可以通过启动守护进程的形式,去不停的刷新锁的过期时间,知道a线程结束删除锁,或者 a 线程挂掉,不在做续期操作

      

    四、redission


    五、redlock  

          主要思想与实现方式即:

               使用多台redis服务器,线程依次去申请redis的分布式锁,假设在规定的有效时间内,拥有半数以上的锁,即加锁成功,否则加锁失败。


    六、并发情况下的大部分失败

           使用自旋锁,即:在一定时间内,不断的进行分布式锁获取,直至超时返回失败


    七、锁重入问题(感觉实际用到的地方比较少,更多的可能会用在底层的引用计数)

           使用计数器原理,在递归的时候,可以对锁进行计数器迭代;直至计数器为0时,释放锁


    八、锁的粒度


    九、总结:

    友情链接
    联系方式
  • 邮箱 / E-mail:121388038@qq.com