分布式锁redis和zookeeper

61 阅读1分钟
1.redisson加锁过程
  • 如果lock加锁成功,会开启一个后台线程,每隔10秒检查是否还持有锁,如果持有则延长锁的时间,如果业务执行完则执行unlock释放锁。
  • 如果加锁失败 则通过while循环一直尝试加锁(自旋),会有一定的性能问题,使CPU空转。(zk通过监听的方式可以解决自旋问题)。
2.redis锁丢失
  • 原因:主从同步过程中,主节点挂了,从节点还没同步锁,锁就丢失了。
  • 解决办法:
  • 1.用zk可以解决,leader先把消息写到日志文件,再发给其他的follower,follower也会写log日志写完会返回ack消息,leader收到过半ack消息就会进行commit,保证了锁不会丢失。
  • 2.使用红锁:超过半数redis节点加锁成功,才算加锁成功。