微服务或分布式场景,如何设计和使用分布式锁

光谈论方式的话,太多了,数据库、jvm内存、redis、zookeeper都可以,最常用的是基于redis实现的redission框架

 

核心原理众多博客讲的很清楚,面试说个大概应该没问题了

第一点,用的reids的setex命令,因为这个命令是原子操作,不会在设置锁的过程中出现意外

第二点,锁过期问题,redission的解决方案是启用监控线程对锁进行续签

第三点,集群部署redis自身同步没来得及,或者宕机的情况,用redlock算法顺序加锁,超过半数可以加锁成功

第四点,如何保证释放锁的线程和加锁线程是同一个,感觉有看门狗,这应该是个兜底策略,通常不会发生,在设置锁时,key可能是锁对象的名字或者同步方法名也行(但是应该没人这么干),value设置为线程的id之类的,释放的时候先get得到线程id,再进行delete操作,但这个操作需要保证原子性,可以用lua的脚本实现

posted @ 2023-07-16 13:07  时间羚羊  阅读(18)  评论(0编辑  收藏  举报