作者回复: 栅栏令牌是悲观锁,在锁被判定超时的情况下,可能其实锁持有方并没有完全死掉,之后它又回来更新共享资源,栅栏令牌是对这种情况的一个修复。
作者回复: 数据库内部的锁,是为了解决数据库内部的并发控制而设计的,它并不能直接应用到数据库以外的场景。为了支持业务上一些需要锁机制的场景,某些数据库也对外提供一些锁机制。这两类锁是面向不同场景的锁。 而业务上一些需要锁机制的场景,可以借助数据库表所对外提供的一些锁机制,来实现乐观锁和悲观锁。当然,除了数据库依赖,redis或者zookeeper之类也提供锁机制。另外,除了锁的具体底层实现以外,一般业务端还要写一些封装代码。
作者回复: 对于分布式锁场景,中大型互联网公司zk用得多,小规模公司redis/DB用得多。因为总体上小规模公司更多,所以我认为redis/DB的使用量更广泛。 打个比方,zk是重量级武器,功能更强大,运维部署成本也高。redis是轻量级武器,功能只能算够用,但是运维部署成本低。
作者回复: 有点类似