redis分布式锁
背景
一个任务往往部署在多台机器上,为了保证数据不重复,要求在同一时刻,同一任务只在一个节点上执行,既保证某一方法同一时刻只能被一个线程执行
基于缓存
基于redis命令
实现原理:
- 加锁:执行setnx,若成功再执行expire添加过期时间
- 解锁:执行delete命令
优点:实现简单,相比数据库和分布式系统,方案最轻,性能最好
缺点:
- setnex和expire分两步,非原子操作,可能出现死锁
- delete命令存在误删除非当前线程持有的锁的可能
- 不支持阻塞等待,不可重入
redisson分布式锁
单点模式,主从模式,哨兵模式,集群模式
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。