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


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

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

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

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

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

  • 相关阅读:
    使用Kmeans进行聚类,用calinski_harabaz_score评价聚类效果
    使用Autoencoder进行降维
    MongoDB 之 MongoDB简介与安装 MongoDB 1
    我的淘宝客之路 起步
    Excel批量导入Orale
    CAB压缩包文件制作
    策略模式
    设计OA系统的用户角色权限分配
    java语言中的限定词
    jQuery LigerUI使用培训
  • 原文地址:https://www.cnblogs.com/zhongmeilin/p/15522601.html
Copyright © 2020-2023  润新知