分布式锁以及原理

  • 分布式锁

1)redis分布式锁

  1. :使用  避免库存超卖 多个服务,多个线程进来访问一个库存共享资源,进行加锁。

导入Redisson的依赖

RLock rlock=redisson.getLock(key);

rlock.lock();

rlock.ulock();

  1. :实现原理图

  1. lua脚本

 

  1. :看门狗,就是获取了锁 送你一条狗 狗按时去检查,检查你发现还在 就给你延长时间。
  2. :释放锁

Rlock.unlock去释放  就是给那个次数-1,为0的时候 就删除掉这个key,然后下个客户端去判断这个key 他就可以加锁了。

高并发情况下: 400台手机,串行去扣减库存 排队排死。

首先 基于Nginx限流,setinl框架限流,然后在基于库存 生成令牌限流。

A):类似于ConcurrentHashMap,分段锁概念,我给我库存分发到不同的分片上,然后给一个分片进行上锁就可以了 这样多个分片同时进行卖库存。

这样子并发就上来了一部分。

2)ZK分布式锁

  1. :持久节点,临时节点,顺序节点。

3)redis分布式锁与ZK分布式锁的区别?

Redis:

A)获取不到锁的线程,就不断去循环去尝试获取锁,比较消耗性能。

B)redis性能高,集群可能会导致选举 出现数据不一致,当然也可以开启持久化。

C)redis如果客户端挂了,需要等到过期时间 才会释放锁。

ZK:

  1. 具有强一致性 ZAB算法
  2. 如果获取不到锁,不会去循环去尝试,具有监听机制。
  3. Zk客户端挂了,他的临时节点会自动删除,然后释放锁。

选型的话:项目有redis就用redis,没有必要单独搭建ZK做分布式锁。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值