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. 我的vi/vim配置文件

    位于/etc/vim/的vimrc " All system-wide defaults are set in $VIMRUNTIME/debian.vim and sourced by & ...

  2. ADS-B显示终端5.9

    更改日志 1  更新背景地图.增加了全国范围内的VOR电台.DME.NDB导航台信息,包含有坐标信息.代码信息.频率等内容.   VOR电台.DME.NDB导航台信息来自中国民航局公布的航行情况资料汇 ...

  3. apache kafkac系列lient发展-java

    apache kafka区QQ群:162272557 1.依赖包 <dependency>             <groupId>org.apache.kafka</ ...

  4. PHP中实现在数据库中的增、删、查、改

    其实要想在PHP中访问并获取到数据库中的数据其实并不难,下面我以例子为大家介绍: 首先,打开PHP软件和WampServer服务,确保在WampServer中的phpMyAdmin中有你要使用的数据表 ...

  5. 个推推送 产品SDK常见问题检查

    作者:Hong Jack链接:https://zhuanlan.zhihu.com/p/20733333来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 通知和消息有什么 ...

  6. [转]JavaScript Namespaces and Modules

    Namespaces In most programming languages we know the concept of namespaces (or packages).Namespaces ...

  7. SQLServer数据库误删数据找回

    记一次SQLServer数据库误删数据找回 昨天 同事在本机清理数据库表时,连接到了生产机,误删了二十几张表,幸好是晚上加班的时候删除的,生产机上当时是一天一备份,还原备份是最后的策略,最关键的还是要 ...

  8. 2008技术内幕:T-SQL语言基础

    2008技术内幕:T-SQL语言基础 单表查询摘记 这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基础>,书中用到的案例数据库是这个 TSQLF ...

  9. cefsharp实现javascript回调C#方法

    在构建完WebView webView = new WebView(url)后,即可调用RegisterJsObject方法来注册一个js对象,从而前端的javascript就可以访问这个对象,调用定 ...

  10. 2014.3.5-C语言学习小结

    知识点: 1.结构体 struct 2.联合体 union 3.枚举 4.结构.联合与函数 =========================== 结构体 思考:如果现在希望保存一个学生的信息,该如何 ...