锁是用来解决什么问题: synchronized、lock
解决多线程并发的问题。
资源共享竞争问题 数据的安全性
分布式锁:
当我们实现锁的时候,其实最主要考虑的两个点是:
1、获得锁
2、释放锁
1.数据库
假设这是运用数据库实现的非重入锁 ,
如果想实现重入锁的话,可以在表结构再一个PID等能表示该进程的字段,
在报已存在唯一约束的时候去查询该条数据的PID是否与现在执行操作的PID相同。 还有数据库实现也会存在许多问题,万一在执行方法的时候报错中断了,就不会执行释放锁的操作,就会一直锁着。
或者是数据库突然崩了,也会出现问题。
2.activeMQ
3.缓存 redis setnx
4.zookeeper 临时有序节点
/locker
client A
client B
client C
可以有序节点,最小的一个点获得锁,可以利用zookeeper的watch事件,而且是临时节点 会话失效就会直接删除 不会存在数据库的情况。