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查看更新后的值。

原文地址:https://www.cnblogs.com/resentment/p/6287687.html