ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

在账单生成中看到同事使用的redis锁

2021-11-08 07:32:18  阅读:132  来源: 互联网

标签:账单 同事 redis sync 生成 获取 财务


场景:合同数据财务1和财务2都是可以看到的,但是一个合同只要生生一份账单就行,好巧不巧,在同一时刻,财务一和财务二同时对A按下了生产账单按钮。那么就产生了两份账单。

同事为了解决这个问题使用了redis,我看了看他的代码,他使用aop 只对有特定注解的进行代理。在代理前 先看不能不能根据合同id获取到值,能获取就说明没有被占用锁,不能获取说明锁占用了,这个账单已经在生成了。在after 他直接删除锁。

说到锁:我先想到的是 sync ,reentrantlock,redisLock. 

reentratLock 相比sync 是可以去尝试获取锁。当获取不到锁可以做其他的操作。比如上面的场景因为账单只能生成一个,这个时候不能使用sync。因为当财务1的线程1生成账单后,线程2也会继续执行,然后也生成了一个账单,没有达到预期的效果。

redislock 相比reentrantLock;reentrantLock只能在一个服务里面起作用。账单服务有两个,使用的负载均衡算法是平均算法。那么财务一和财务2的请求刚好请求在不同的服务里面,那么就生成了两个账单。 使用redisLock的话,两个服务也是去同一个redis里面查看有么有值,来判断账单是否在生成。

 

标签:账单,同事,redis,sync,生成,获取,财务
来源: https://www.cnblogs.com/zhongmeilin/p/15522601.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有