分布锁特点:互斥,无死锁,高可用/无容错
1.原理:利用setNx指令,判断key是否存在,存在则不操作
2.步骤:
a.开始设置uuid,过期时间,中间再开一个线程,判断父线程是否结束,没有则过期时间延长30s
b.结束的时候,根据uuid清空key
3.利用框架
Redission
如果redis还没来得及同步到从节点,主节点挂了,怎么办?
CAP:决定一致性,可用性,分区容错性
redis:AP,(因为异步,就难保证一致性)
zookeeper:cp(因为同步,就难保证可用性)
zookeeper原理:主节点同步数据到一半的从节点,就反馈告诉同步数据成功
如何保证库和redis数据一致?
a.消息队列
b.分布式事务
秒杀服务器挂了,怎么办?熔断,限流
黄牛,怎么解决?验证码,黑名单IP