Redis分布式锁

前言:
编程之路的确不易,小女不才,半晌时间,也只理解皮毛。
分布式架构、微服务、并发编程等 心之向往。望不负初心,坚持下去。

以下java代码剪切自诸葛老师。自己稍稍做了下注释,以便更好的理解。

在这里插入图片描述

分布式锁,主要解决秒杀高并发下单问题。它与悲观锁和乐观锁大大不同。

不使用redisson的情况:

  • 1.首先给商品设置uuid编号,为了防止高并发 锁永久失效问题

锁永久失效解释:
例如:给锁设置有效期为10s,第一个用户抢到锁后,释放锁之前,时间过期了,然后锁自然释放,第二个用户抢到锁,开始执行,等第一个用户执行完之后,到第三步开始释放锁,实际上释放的是用户二的锁,然后用户3进来…如果在高并发的情况下,就形成了锁永久失效问题。

  • 2.做异常处理,无论是否抢到锁,或者中途宕机,或者出现死锁情况,finally都要释放锁。而且,释放锁的只能是同一个用户。

  • 3.中间会出现死锁的情况:
    1.用户一抢到锁之后,在释放锁之前宕机。
    2.抢到锁之后,没有设置有效期。
    3.抢到锁之后,设置了有效期,但是有效期的时间完全不知道要设置多久才是合适的,所以又设置了超时时间。防止有效期时间太短,自动释放锁。

  • 4.释放锁的时候,与之前的uuid做比较,如果确认是同一个用户,则才能删除锁。

所有的优化都结束后,还有一个问题:超时时间你要设置多少合适?怎么解决?

redisson 已经帮我们做好了一切,直接使用就行了。

redisson的原理:提供了两个线程,主线程负责执行任务,另一个线程负责监视超时时间,如果有效期已经到期,查看任务是否完成,如果没有完成,就续命,再续30s。

使用redisson就三步:

1.创建redisson对象
2.上锁,对象.lock(默认锁30s,超时时间也默认30s)这两个参数可不填
3.解锁,对象.unlock()

以下图是redisson锁实现的原理在这里插入图片描述
如果你还不满足,还可以优化,从Redis主从复制出发。
先透漏一点,数据刚入主服务器,服务器出故障…(自行脑补)
哈哈,我的智商就停留在这了,主从太高端,一两句话说不清楚,那就下次分享。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值