若有收获,请记得分享和转发哦
这篇文章我想和你聊一聊,关于 Redis 分布式锁的「安全性」问题。
Redis 分布式锁的话题,很多文章已经写烂了,我为什么还要写这篇文章呢?
因为我发现网上 99% 的文章,并没有把这个问题真正讲清楚。导致很多读者看了很多文章,依旧云里雾里。例如下面这些问题,你能清晰地回答上来吗?
基于 Redis 如何实现一个分布式锁?
Redis 分布式锁真的安全吗?
Redis 的 Redlock 有什么问题?一定安全吗?
业界争论 Redlock,到底在争论什么?哪种观点是对的?
分布式锁到底用 Redis 还是 Zookeeper?
实现一个有「容错性」的分布式锁,都需要考虑哪些问题?
这篇文章,我就来把这些问题彻底讲清楚。
读完这篇文章,你不仅可以彻底了解分布式锁,还会对「分布式系统」有更加深刻的理解。
文章有点长,但干货很多,希望你可以耐心读完。
为什么需要分布式锁?
在开始讲分布式锁之前,有必要简单介绍一下,为什么需要分布式锁?
与分布式锁相对应的是「单机锁」,我们在写多线程程序时,避免同时操作一个共享变量产生数据问题,通常会使用一把锁来「互斥」,以保证共享变量的正确性,其使用范围是在「同一个进程」中。
如果换做是多个进程,需要同时操作一个共享资源,如何互斥呢?
例如,现在的业务应用通常都是微服务架构,这也意味着一个应用会部署多个进程,那这多个进程如果需要修改 MySQL 中的同一行记录时,为了避免操作乱序导致数据错误,此时,我们就需要引入「分布式锁」来解决这个问题了。