Cache

路径缓存(Path Cache)

监视一个ZNode,当子节点增加、更新、删除改变状态时,路径缓存会在本地保存当前子节点及其数据和状态。

public PathChildrenCache(CuratorFramework client,
String path,
boolean cacheData)
参数:
client 客户端实例
path 监视路径
cacheData 值为true时会缓存子节点数据 cache.start(); //开始缓存,start还有一种重载接受一个StartMode,一共三种模式 NORMAL-不会初始化cache ,BUILD_INITIAL_CACHE-start返回前会重建cache提供初始值,POST_INITIALIZED_EVENT-初始化后同时触发INITIALIZED事件
cache.getCurrentData(); //返回当前缓存
cache.getListenable().addListener(PathChildrenCacheListener listener) //增加cache变化的监听器
cache.close(); //手动关闭缓存

节点缓存(Node Cache)

监视ZNode,当节点数据被修改或删除,节点缓存会在本地改变自身状态(删除的话会变成null)。

public NodeCache(CuratorFramework client,
String path)
参数:
client 客户端实例
path 节点路径 cache.start(); //开始缓存
cache.getCurrentData(); //返回当前缓存
cache.getListenable().addListener(PathChildrenCacheListener listener) //增加cache变化的监听器
cache.close(); //手动关闭缓存

树缓存(Tree Cache)

本地缓存ZK的树形结构。监视ZK路径,监听更新、新建、删除事件并更新数据。

public TreeCache(CuratorFramework client,
String path,
boolean cacheData)
参数:
client 客户端实例
path 监视路径
cacheData 值为true时会缓存子节点数据 cache.start(); //开始缓存
cache.getCurrentData(); //返回当前缓存
cache.getListenable().addListener(PathChildrenCacheListener listener) //增加cache变化的监听器
cache.close(); //手动关闭缓存

Counters

共享计数器(Shared Counter)

维护一个共享的整数,所有客户端可以得到最新的值(利用ZK的一致性)。

public SharedCount(CuratorFramework client,
String path,
int seedValue)
参数:
client 客户端实例
path 计数器存储路径
seedValue 路径不存在时的默认初始值 count.start(); //首先需要运行start方法
count.getCount(); //获得计数
count.addListener(SharedCountListener listener); //count变化后的监听器
count.setCount(int newCount); //修改计数值,不考虑当前值
count.trySetCount(int newCount); //只有在getCount后值没有变的情况下才会调用成功,会返回布尔类型标识是否成功
count.close(); //需要手动关闭

分布式原子长整形(Distributed Atomic Long)

原子递增计数。会首先使用乐观锁。如果失败可以选择使用进程间锁(InterProcessMutex)。无论哪种情况都会需要重试策略。

public DistributedAtomicLong(CuratorFramework client,
String counterPath,
RetryPolicy retryPolicy)
该构造函数创建的对象只会使用乐观锁
参数:
client 客户端实例
counterPath 计数器路径
retryPolicy 重试策略 public DistributedAtomicLong(CuratorFramework client,
String counterPath,
RetryPolicy retryPolicy,
PromotedToLock promotedToLock)
该构造函数创建的对象会使用乐观锁,如果不成功再使用进程锁
Parameters:
client 客户端实例
counterPath 计数器路径
retryPolicy 重试策略
promotedToLock 进程锁变量

该对象包含get/increment/decrement/add/subtract方法。

使用返回值得AtomicValue.succeeded方法检查是否更新成功,preValue查看更新前值,postValue查看更新后的值。

Curator Recipes(Cache&Counter)的更多相关文章

  1. 二十一、curator recipes之TreeCache

    简介 curator的TreeCache允许对某个路径的数据和路径变更以及其下所有子孙节点的数据和路径变更进行监听. 官方文档:http://curator.apache.org/curator-re ...

  2. 二十、curator recipes之NodeCache

    简介 Curator的NodeCache允许你监听一个节点,当节点数据更改或者节点被删除的时候将会触发监听. 官方文档:http://curator.apache.org/curator-recipe ...

  3. 十九、curator recipes之PathChildrenCache

    简介 curator可以监听路径下子节点的变更操作,如创建节点,删除节点 官方文档:http://curator.apache.org/curator-recipes/path-cache.html ...

  4. 高性能MySql进化论(四):Summary,Cache,Counter表的使用

    在实际的应用中,往往会定期的对一个周期内的系统数据进行统计分析.例如某购物网站定期的统计商品在一个月/年期内的销售情况,如果采用扫描所有相关表的方式在某个时间点进行统计分析, 由于数据量很大,以及表结 ...

  5. 十三、curator recipes之SharedCounter

    简介 我们可以通过curator实现对一个分布式环境下共享变量的访问,zookeeper将共享变量维护在同一个路径下. 官方文档:http://curator.apache.org/curator-r ...

  6. 十八、curator recipes之DistributedDelayQueue

    简介 curator实现了类似DelayQueue的分布式延迟队列 官方文档:http://curator.apache.org/curator-recipes/distributed-delay-q ...

  7. 十七、curator recipes之DistributedPriorityQueue

    简介 官方文档:http://curator.apache.org/curator-recipes/distributed-priority-queue.html javaDoc:http://cur ...

  8. 十六、curator recipes之DistributedIdQueue

    简介 curator实现了一种分布式ID队列,也是遵循FIFO原则,比普通队列新增的一个点是ID队列可以根据ID对队列元素进行操作,比如移除该元素. 官方文档:http://curator.apach ...

  9. 十五、curator recipes之DistributedQueue

    简介 curator实现了先入先出的分布式消息队列,它采用的是zookeeper的持久化有序节点. 官方文档:http://curator.apache.org/curator-recipes/dis ...

随机推荐

  1. LINUX下FD_SET介绍

    刚刚了解了linux下select系统调用,函数原型是 #include <sys/select.h> #include <sys/time.h> int select(int ...

  2. html5 Canvas画图3:1px线条模糊问题

    点击查看原文地址: html5 Canvas画图3:1px线条模糊问题 本文属于<html5 Canvas画图系列教程> 接上一篇canvas画线条教程 上次我们讲到,canvas有时候会 ...

  3. 让png在ie下正常显示 用到了jquery插件DD_belatedPNG 但是在ie6中这句话 前面添加有效 后面移除无效 IE6 jq removeClass无效

    jQuery(this).addClass("background").siblings().removeClass("background") 导致IE6移除 ...

  4. 安装uBuntu操作系统 - 初学者系列 - 学习者系列文章

    uBuntu是一款不错的Linux操作系统,在上面的应用软件不少,就是说它的支持率挺高.下面就对这款操作系统的安装做下介绍. 1.  下载uBuntu安装文件 打开中文页面.http://www.ub ...

  5. 【分布式存储系统sheepdog 】

    Sheepdog,是由NTT的3名日本研究员开发的开源项目,主要用来为虚拟机提供块设备. 其架构例如以下: 以下,我们将从架构.模块等几个方面来介绍下: 一.架构图 如上图: 採用无中心节点的全对称架 ...

  6. 用HTML和javascript(JS)计算触屏手机手指滑动方向的演示

    移动终端的流行,程序员希望通过HTML+JS完成触屏动作的识别.下面给出具体实现的例子,供大家参考. 将下面的代码复制并保存,用手机访问,现在的手机浏览器一般都支持触屏,针对本演示来讲就是支持三个js ...

  7. 在 InstantRails 环境下,安装使用 redMine

    在 InstantRails 环境下,安装使用 redMine 分类: Redmine2009-06-01 10:35 732人阅读 评论(0) 收藏 举报 characterrailsencodin ...

  8. 使用jquery.form异步提交注意jquery.validate需要手动添加验证

    使用jquery.form.js异步提时,即使jquery.validate验证失败也会提交的所以加个$("form").valid()来判断是否通过验证: $("#fo ...

  9. iOS后向兼容:如何发现过期接口

    以4.3以下兼容性为例,在项目预编译头文件(xx.pch)中加入如下代码: #import <Availability.h> #define __AVAILABILITY_INTERNAL ...

  10. SHELL 近期学习

    由于项目中很少使用到shell脚本所以.只是偶尔自学一点.慢慢积累.下面就把近段时间积累的发出来.学习. #sort sort 按首字母排序 sort -n 按数字大小 从小到大排序 sort -rn ...