1.数据库
性能差
2.redis
可能出现死锁
3.zookeeper
功能:zk存储,读取数据;数据节点监听服务,临时节点跟客户端断开数据丢失;持久节点跟客户端断开数据还在
两种方式:
1.创建临时节点,创建成功获得锁,创建同名则报错,监听lock节点的删除事件,加锁线程执行完业务逻辑解锁删除临时节点,则触发删除事件,则重新去获得锁
2.创建临时有序节点,只需要监听一个,所以性能好,但是资源占用多
trylock:创建临时有序节点,获取临时节点集合并排序,判断自己是不是最小的节点,是则加锁成功;否则获得前边的节点监听其删除事件,前边节点删除时,则重新trylock
unlock:释放锁就是删除节点或者客户端断开
第一种:
第二种: