Curator Recipes(Cache&Counter)
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)的更多相关文章
- 二十一、curator recipes之TreeCache
简介 curator的TreeCache允许对某个路径的数据和路径变更以及其下所有子孙节点的数据和路径变更进行监听. 官方文档:http://curator.apache.org/curator-re ...
- 二十、curator recipes之NodeCache
简介 Curator的NodeCache允许你监听一个节点,当节点数据更改或者节点被删除的时候将会触发监听. 官方文档:http://curator.apache.org/curator-recipe ...
- 十九、curator recipes之PathChildrenCache
简介 curator可以监听路径下子节点的变更操作,如创建节点,删除节点 官方文档:http://curator.apache.org/curator-recipes/path-cache.html ...
- 高性能MySql进化论(四):Summary,Cache,Counter表的使用
在实际的应用中,往往会定期的对一个周期内的系统数据进行统计分析.例如某购物网站定期的统计商品在一个月/年期内的销售情况,如果采用扫描所有相关表的方式在某个时间点进行统计分析, 由于数据量很大,以及表结 ...
- 十三、curator recipes之SharedCounter
简介 我们可以通过curator实现对一个分布式环境下共享变量的访问,zookeeper将共享变量维护在同一个路径下. 官方文档:http://curator.apache.org/curator-r ...
- 十八、curator recipes之DistributedDelayQueue
简介 curator实现了类似DelayQueue的分布式延迟队列 官方文档:http://curator.apache.org/curator-recipes/distributed-delay-q ...
- 十七、curator recipes之DistributedPriorityQueue
简介 官方文档:http://curator.apache.org/curator-recipes/distributed-priority-queue.html javaDoc:http://cur ...
- 十六、curator recipes之DistributedIdQueue
简介 curator实现了一种分布式ID队列,也是遵循FIFO原则,比普通队列新增的一个点是ID队列可以根据ID对队列元素进行操作,比如移除该元素. 官方文档:http://curator.apach ...
- 十五、curator recipes之DistributedQueue
简介 curator实现了先入先出的分布式消息队列,它采用的是zookeeper的持久化有序节点. 官方文档:http://curator.apache.org/curator-recipes/dis ...
随机推荐
- Visual Studio 如何给生成的exe加入多个图标资源
Visual Studio 如何给生成的exe加入多个图标资源(快捷方式可调用) 方法: 打开你的VS, 文件—>新建—>文件 常规—>选择本机资源模板(rct文件) 如图一 新建后 ...
- 在linux中如何调试C语言程序
在Linux下面可以使用下面几种形式对C语言进行调试: 1 gdb gdb program 这是最原始的调试方法,若非熟悉命令行,这种方式其实是比较麿人的.有兴趣的可以参考一些我之前的博文.http: ...
- Singal Page App:使用Knockout和RequireJS创建高度模块化的单页应用引擎
Singal Page App 开篇扯淡 距离上一篇文章已经有好几个月,也不是没有时间记录点东西,主要是换了新的工作,在一家外资工作,目前的工作内容大多都是前端开发,新接触的东西因为时间原因,大多还不 ...
- 所有MVP文章
http://msdn.microsoft.com/zh-cn/dd346590.aspx
- 读书笔记—CLR via C#反射
前言 这本书这几年零零散散读过两三遍了,作为经典书籍,应该重复读反复读,既然我现在开始写博了,我也准备把以前觉得经典的好书重读细读一遍,并且将笔记整理到博客中,好记性不如烂笔头,同时也在写的过程中也可 ...
- JavaScript中JSON字符串和JSON对象相互转化
JSON字符串转化为JSON对象的2种方式 一.使用函数eval var personsstr = '[{"Name":"zhangsan","Age ...
- 实现$.fn.extend 和$.extend函数
Jquery揭秘系列:实现$.fn.extend 和$.extend函数 前面我们扩展了bind方法和ready函数,这次我要讲一下$.fn.extend 和$.extend函数. 其他的不多说, ...
- c# in deep 之委托
通俗来讲,委托就是吩咐别人去做某件事,但不知道他具体会怎么做.使用委托必须注意的一个问题是内存泄露问题:假如委托实例本身不能被回收,委托实例会阻止他的目标被作为垃圾回收.尤其是假如某“短命”的对象调用 ...
- [Usaco2008 Mar]Cow Travelling游荡的奶牛[简单DP]
Description 奶牛们在被划分成N行M列(2 <= N <= 100; 2 <= M <= 100)的草地上游走,试图找到整块草地中最美味的牧草.Farmer John ...
- Asp.Net中使用Couchbase——Memcached缓存使用篇
Asp.Net中使用Couchbase——Memcached缓存使用篇 前言 在上一篇Asp.Net中使用Couchbase——Memcached缓存入门篇http://www.cnblogs.com ...