分布式锁
文章平均质量分 90
分布式锁
坚持每天学习一点
找一个程序员学习搭子 杭州有没有帮我内推的大佬?
展开
-
RedLock + Redisson
还提供了许多分布式服务。(Separation of Concern),从而让使用者能够将精力更集中地放在处理业务逻辑上。使用 Jmeter并发压测后,查看redis的库存确实减为0,表明redisson锁是确实是可用的。Redisson提供了使用Redis的最简单和最便捷的方法。Redisson的宗旨是。使用 RedisClient的锁。StockService 代码片段如下。注入 RedissonClient 客户端。Redisson提供了一系列的。原创 2023-07-30 20:44:38 · 557 阅读 · 0 评论 -
1、传统锁回顾(Jvm本地锁,MySQL悲观锁、乐观锁)
场景:商品S库存余量为5时,用户A和B同时来购买一个商品,此时查询库存数都为5,库存充足则开始减库存。使用jmeter压力测试工具,高并发下压测一下,添加线程组:并发100循环50次,即5000次请求。重启tomcat服务,再次使用jmeter压力测试,查看数据库,发现库存确实没有减到 0 ,发生超卖。重启tomcat服务,再次使用jmeter压力测试,查看数据库,发现库存确实没有减到 0 ,发生超卖。在浏览器中一个一个访问时,每访问一次,库存量减1,没有任何问题。原创 2023-07-24 22:54:36 · 1108 阅读 · 1 评论 -
2、基于redis实现分布式锁
借助于redis中的命令setnx(key, value),key不存在就新增,存在就什么都不做。同时有多个客户端发送setnx命令,只有一个客户端可以成功,返回1(true);其他的客户端返回0(false)。改造StockService方法:使用 jmeter 进行压测查看库存数量上述代码优化,不断重试的过程中一直进行递归,最终导致栈的溢出。解决2.2. 防死锁问题:setnx刚刚获取到锁,当前服务器宕机,导致del释放锁无法执行,进而导致锁无法锁无法释放(死锁)解决:给锁设置过期时间,原创 2023-07-25 23:48:55 · 909 阅读 · 1 评论 -
3、基于Zookeeper实现分布式锁
Zookeeper提供一个多层级的节点命名空间(节点称为znode),每个节点都用一个以斜杠(/)分隔的路径表示,而且每个节点都有父节点(根节点除外),非常类似于文件系统。获取锁:create一个节点(因为一个节点只能创建一次,当一个线程创建完一个节点后,其他线程都不能创建该节点了)当/xx节点的子节点创建或者删除时:NodeChildChanged。当/xx节点创建时:NodeCreated。当/xx节点删除时:NodeDeleted。节点创建:stat -w /xx。节点删除:stat -w /xx。原创 2023-07-22 16:30:33 · 1174 阅读 · 0 评论 -
4、基于mysql实现分布式锁
synchronized关键字和ReetrantLock锁都是独占排他锁,即多个线程争抢一个资源时,同一时刻只有一个线程可以抢占该资源,其他线程只能阻塞等待,直到占有资源的线程释放该资源。查看redis 库存为0,表明mysql锁确实起到作用了。利用唯一键索引不能重复插入的特点实现。1、创建锁表,和对应的实体类。原创 2023-08-12 18:16:41 · 399 阅读 · 0 评论