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. Django小例子 – 模型数据的模板呈现

    学习Django的这几天,学习过程还是很愉快的,django采用的MVC架构,学习曲线十分平缓,在深入学习之前,先简单的整理记录下django从数据库中获取数据并在模板中使用的方法.温故而知新 ^_^ ...

  2. HTTP2协议之HPACK--之头部压缩规范介绍

    接下来打算把HTTP2协议的头部压缩算法给翻译下,敬请等候. HPACK - Header Compression for HTTP/2 HPACK:HTTP/2头部压缩 概要说明 这个规范定义了HP ...

  3. css技巧--整理(1)

    1.文字描边 -webkit-text-shadow:#be8ef8 2px 0 1px,#be8ef8 0 2px 1px,#be8ef8 -2px 0 1px,#be8ef8 0 -2px 1px ...

  4. Inno Setup connection to the database and create

    原文 Inno Setup connection to the database and create Description: the first half of this program in I ...

  5. 一个用MFC实现Com聚合样本

    ComATLATLMFCMFC MFCIUnknownMFCCCmdTargetComMFCCom MFCCOM 1. 1.1 #pragma once typedef long HRESULT; / ...

  6. 免费的编程中文书籍索引 from github

    免费的编程中文书籍索引 免费的编程中文书籍索引,欢迎投稿. 国外程序员在 stackoverflow 推荐的程序员必读书籍,中文版. stackoverflow 上的程序员应该阅读的非编程类书籍有哪些 ...

  7. Javascript多线程引擎(一)

    Javascript多线程引擎(一) Javascript 天生是单线程的语言, 不支持synchronized等线程操作, 但是这便不妨碍Javascript作为web语言中最具有魅力语言之一. 虽 ...

  8. Javascript模块化编程之Why

    说到模块化编程,大家比较容易想到Java, C++等语言,感觉这事和Javascript沾不上一丁点边.虽说Javascript看上去好像同Java有莫大的关系,但那也只是一厢情愿,不过是挂羊头卖狗肉 ...

  9. 怎么让猫吃辣椒 转载自 xiaotie

    典故: 某日,毛.周.刘三人聊天. 毛:怎么能让猫自愿吃辣椒? 刘:掐着脖子灌. 毛:强迫不是自愿. 周: 先饿几天,再混到猫爱吃的东西里. 毛:欺骗不是自愿.把辣椒涂到猫肛门上,它就会自己去舔了. ...

  10. 逻辑回归模型(Logistic Regression, LR)基础

    逻辑回归模型(Logistic Regression, LR)基础   逻辑回归(Logistic Regression, LR)模型其实仅在线性回归的基础上,套用了一个逻辑函数,但也就由于这个逻辑函 ...