扫码关注微信公众号
回复“面试手册”,获取本站PDF版
回复“简历”,获取高质量简历模板
回复“加群”,加入程序员交流群
回复“电子书”,获取程序员类电子书
基本思路就是要在整个系统中提供一个全局、唯一的获取锁的“东西”,然后每个系统在需要加锁时,都去问这个“东西”拿到一把锁,这样不同的系统拿到的就可以认为是同一把锁。
常见的分布式锁实现方案有三种:
基于关系型数据库:
优点:直接借助数据库容易理解
缺点: 在使用关系型数据库实现分布式锁的过程中会出现各种问题,例如数据库单点问题和可重入问题,并且在解决过程中会使得整个方案越来越复杂
基于Redis:
优点:性能好,实现起来较为方便
缺点:
- key的过期时间设置难以确定,如何设置的失效时间太短,方法没等执行完,锁就自动释放了,那么就会产生并发问题。如果设置的时间太长,其他获取锁的线程就可能要平白的多等一段时间。
- Redis的集群部署虽然能解决单点问题,但是并不是强一致性的,锁的不够健壮
基于zookeeper:
优点:有效地解决单点问题,不可重入问题,非阻塞问题以及锁无法释放的问题,实现起来较为简单。
缺点:性能上不如使用缓存实现分布式锁
三种方案的对比
方案 | 复杂度 | 性能 | 可靠性 | 学习成本 |
---|---|---|---|---|
基于关系型数据库 | 低 | 低 | 低 | 低 |
基于Redis | 中 | 高 | 中 | 中 |
基于zookeeper | 高 | 中 | 高 | 高 |
本站链接:https://www.mianshi.online,如需勘误或投稿,请联系微信:lurenzhang888
点击面试手册,获取本站面试手册PDF完整版