redis分布式锁
第一、分布式锁解决方案 分布式锁一般有三种实现方式 1.数据库乐观锁 采用数据库 不建议 性能不好 jdbc 2.基于redis分布式锁 基于Redis实现分布式锁(setnx)setnx也可以存入key,如果存入key成功返回1,如果存入的key已经存在了,返回0. 多个客户端(jvm),使用setnx命令方式,同时在redis上创建相关的一个key,因为redis key不能够允许重复的看,只有谁能够创建key成功,谁就能够获取到锁,没有创建key成功jvm,就会等待。 3. 基于ZooKeeper的分布式锁 基于Zookeeper实现分布式锁 Zookeeper是一个分布式协调工具,在分布式解决方案中, 多个客户端(jvm),同时在zk上创建相同的一个临时节点,因为临时节点路径是保证唯一, 只要谁能够创建节点成功,谁就能够获取到锁,没有创建成功节点,就会进行等待,当释放锁的时候,采用事件通知给客户端重新获取锁的资源。 最终核心思路,保证只能够有一个jvm进行做操作 第二、分析Redis实现分布式锁 多个客户端(jvm),使用setnx命令方式,同时在redis上创建相同的一个key,因为redis key不会允许重复的,只要能够创建key成功,谁就能够获取到锁,没有创建key成功jvm,就会进行等待。 如何释放锁? 在执行操作的时候,删除对应的key