zoukankan      html  css  js  c++  java
  • 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查看更新后的值。

  • 相关阅读:
    融云会话界面导航上移-使用IQKeyboardManager
    App调用safar
    info.plist 安全登录
    could not find developer disk image
    easyExcel使用以及踩过的坑
    springBoot配置文件详解
    jvm面试题(纯手撸)
    面试题
    设计模式之观察者模式(Observer)
    设计模式之模板方法(TemplateMethod)
  • 原文地址:https://www.cnblogs.com/resentment/p/6287687.html
Copyright © 2011-2022 走看看