分布式锁的常见实现方式有哪些