springboot2.0.3整合zookeeper实现分布式锁

2019年3月7日14:27:16 发表评论 17 阅读

1.zookeeper安装

curl-sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://193f7471.m.daocloud.iodaocloud123zkCli.sh -server 127.0.0.1:3001 create /minitest hellominiget /adminls /admindelete /admin

dataVersion 可以作为乐观锁
1.1 zookeeper基础知识

(1) session基本原理

​ 客户端与服务器之间维持会话,每个会话都可以设置一个超时时间,心跳结束那么会话就结束。心跳存在,那么就是告诉服务器别把我删掉。

​ session过期之后,session创建的临时节点会被抛弃。

心跳机制:客户端向服务器发送Ping包请求。

(2)基本命令

create /aaa bbb 创建一个aaa节点 值为bbb

get /aaa 获取节点

set /aaa bbb 1 设置aaa节点值为bbb,并且只有在版本为1的情况下生效,否则失败

delete /aaa 注意若节点下没有子节点才可以删除。若存在子节点,那么先删除子节点。

(3)zk特性watcher机制

针对每个节点的操作,都会有一个监听者watcher。

当监控的某个对象发生了变化(父节点或子节点增删改操作),就会出发watcher机制。

针对不同类型的操作,触发的watcher事件也不同。(创建,删除,数据变化事件)

zk中的watcher是一次性的,触发后就会被销毁。

stat /aaa watch 监听aaa

create /aaa 123 创建一个aaa节点

watcherEvent : node created path:/aaa

get /aaa watcher 设置 aaa监听

set /aaa bbb

触发watcherEvent nodeDataChanged path /aaa

delete /imooc 发现没有watcher事件,则说明watcher是一次性的

get /aaa watcher 设置 aaa监听 delete /imooc

触发watcherEvent NodeDeleted

ls为父节点设置watcher,创建子节点触发NodeChildrenChanged

ls为父节点设置watcher, 删除子节点触发NodeChildrenChanged

ls为父节点设置watcher, 修改子节点值不触发事件,只有把子节点当父节点,修改数据得时候才发生nodeChanged事件

2. 分布式锁依赖监听:

(1)将zookeeper添加到springboot中

(2)分布式锁

(3)以分布式环境下修改缓存为例(这里代码用到了2级缓存:redis+ehcache)

 

  • 微信号:sqymail
  • 微信扫一扫欢迎加我为好
  • weinxin
  • 交流QQ群号:248249544
  • IntelliJ IDEA,Java 技术交流
  • weinxin
  • A+
所属分类:java

发表评论

您必须登录才能发表评论!