redis实现分布式锁
一、分布式锁简介 锁 是一种用来解决多个执行线程 访问共享资源 错误或数据不一致问题的工具。 如果 把一台服务器比作一个房子 ,那么 线程就好比里面的住户 ,当他们想要共同访问一个共享资源,例如厕所的时候,如果厕所门上没有锁...更甚者厕所没装门...这是会出原则性的问题的.. 装上了锁,大家用起来就安心多了,本质也就是 同一时间只允许一个住户使用 。 而随着互联网世界的发展,单体应用已经越来越无法满足复杂互联网的高并发需求,转而慢慢朝着分布式方向发展,慢慢进化成了 更大一些的住户 。所以同样,我们需要引入分布式锁来解决分布式应用之间访问共享资源的并发问题。 为何需要分布式锁 一般情况下,我们使用分布式锁主要有两个场景: 避免不同节点重复相同的工作 :比如用户执行了某个操作有可能不同节点会发送多封邮件; 避免破坏数据的正确性 :如果两个节点在同一条数据上同时进行操作,可能会造成数据错误或不一致的情况出现; Java 中实现的常见方式 上面我们用简单的比喻说明了锁的本质: 同一时间只允许一个用户操作 。所以理论上,能够满足这个需求的工具我们都能够使用 (就是其他应用能帮我们加锁的) : 基于 MySQL 中的锁 :MySQL 本身有自带的悲观锁 for update 关键字,也可以自己实现悲观/乐观锁来达到目的; 基于 Zookeeper 有序节点 :Zookeeper