redis用来作分布式锁真的有必要吗?

569 阅读1分钟

常常见到这样的场景:微服务的环境下,多个服务器并发访问一个数据库,比如MySQL数据库,为了保证能所谓的访问数据库这样的共享资源时进程互斥,于是采用了Redis服务器来提供锁服务,实现并发控制。原理是一台服务器若想访问数据库,首先得在redis中获取到锁。

本图来自:怎样实现redis分布式锁? - Kaito的回答 - 知乎

然而,在描述这样的场景时似乎忘了MySQL本身就有完整的并发控制!什么悲观锁、乐观锁,而且ACID中的I就是isolated呀!

所以想问各位江湖好汉,用redis作分布式锁真的有实际应用吗?具体是什么场景呢?

此外我觉得上图描述的场景本来就是个大bug,经常被描述成分布式场景。这哪里是分布式场景呀,如果从事务的角度来看,妥妥的本地事务,连全局事务都算不上,就一台数据库能算分布式场景?

我理解的分布式数据库,或说分布式存储场景,应该至少有两台数据库,这样的场景下才会发生因为并发带来的数据不一致性,才会有CAP、BASE理论的提出,才会有各种算法,Paxos、Raft等,以及基于此的服务如Zookeeper等。