采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,今天面试面试官问了个问题,就是一个秒杀的场景,线程1获取了由redis生成的分布式锁,但由于代码块执行效率不高,导致线程1还没执行完,分布式锁就超时自动释放锁了,这时候线程2获取到了这个锁,这样就可能造成超卖的后果,像这种情况有什么方法解决?
这种解决办法其实挺多的,最简单的就是不设置过期时间,业务执行完之后再释放锁。不过如果服务挂了什么的容易死锁。所以推荐给你一个redis客户端redission你可以用这个里面的可重入锁lock,不设置过期时间,业务执行完之后释放锁,然后它有个看门狗机制,默认30秒过期时间,每隔10秒钟检查一下锁还被占用redisson客户端也活着呢,就重新把过期时间设置为30秒。如果redission客户端挂了就释放锁了,避免了死锁问题,也解决了你的复杂业务超时执行问题。具体的你可以查一下资料。
是的,我也觉得
要设置合理的锁超时时间
老师好,时间一般都是测试过合理的,但线上环境总会有些意外情况的,例如说数据库突然负载很高导致程序出的问题,有时候很难避免,要怎么设置分布式锁的逻辑,可以解决?
登录后可查看更多问答,登录/注册
突破自身技术瓶颈,高效完成面试准备,超常发挥,收获高薪offer
1.4k 2
839 7
852 4
861 4
688 4