Curator-Recipes-Caches(五)

摘要

利用ZooKeeper可以在应用的集群各个节点之间缓存数据。 每个应用的节点都可以得到最新的缓存的数据。

Curator提供了三种方式:

  • Path Cache
  • Node Cache
  • Tree Cache

Path Cache

Path Cache 用来监控一个节点的子节点(节点的path)。不管是子节点的添加,更新或者删除,Path Cache会改自己的状态,包含这些子节点,子节点数据,子节点状态。

用法

创建PathChildrenCache

1
2
3
4
5
6
7
public PathChildrenCache(CuratorFramework client,
String path,
boolean cacheData)
Parameters:
client - the client
path - path to watch
cacheData - if true, node contents are cached in addition to the stat

启动调用start(),用我后调用close();

有两个start的版本,一个没有参数的是默认的,另外一个参数是一个枚举StartMode,允许你控制什么时候预热缓存数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
* Method of priming cache on {@link PathChildrenCache#start(StartMode)}
*/
public enum StartMode
{
/**
* The cache will be primed (in the background) with initial values.
* Events for existing and new nodes will be posted.
*/
NORMAL,

/**
* The cache will be primed (in the foreground) with initial values.
* {@link PathChildrenCache#rebuild()} will be called before
* the {@link PathChildrenCache#start(StartMode)} method returns
* in order to get an initial view of the node.
*/
BUILD_INITIAL_CACHE,

/**
* After cache is primed with initial values (in the background) a
* {@link PathChildrenCacheEvent.Type#INITIALIZED} will be posted.
*/
POST_INITIALIZED_EVENT
}
  1. NORMAL: 初始时为空。
  2. BUILD_INITIAL_CACHE: 在这个方法返回之前调用rebuild()
  3. POST_INITIALIZED_EVENT: 当Cache初始化数据后发送一个PathChildrenCacheEvent.Type#INITIALIZED事件

任何时候,你可以调用getCurrentData()获取缓存中的当前状态。通过调用getListenable()可以注册监听

1
2
3
4
public void addListener(PathChildrenCacheListener listener)
Add a change listener
Parameters:
listener - the listener

错误处理机制

PathChildrenCache 内部注册了 ConnectionStateListener。如果连接状态变化,缓存会被重置(PathChildrenCacheListener接收到 一个RESET)。

Node Cache

Node Cache用来监听节点,节点的数据被修改或者节点被删除,Node Cache会改变状态,包含当前的数据(或者如果节点被删除,为null)。

用法

1
2
3
4
5
public NodeCache(CuratorFramework client,
String path)
Parameters:
client - the client
path - path to cache

同样启动要调用 start(),关闭调用close()。

任何时候,你可以调用getCurrentData()获取缓存中的当前状态。通过调用getListenable()可以注册监听

1
2
3
4
public void addListener(NodeCacheListener listener)
Add a change listener
Parameters:
listener - the listener

错误处理机制

NodeCache 内部也注册了ConnectionStateListener

Tree Cache

Tree Cache会监听zkpath下所有子节点,响应更新,创建,删除事件,下拉数据等,你可以注册一个监听器,当发生时会收到通知。

用法

1
2
3
4
5
6
7
public TreeCache(CuratorFramework client,
String path,
boolean cacheData)
Parameters:
client - the client
path - path to watch
cacheData - if true, node contents are cached in addition to the stat

同样启动要调用 start(),关闭调用close()。

任何时候,你可以调用getCurrentChildren()获取缓存中的当前状态。getCurrentData()获取被监听的路径下的数据。 通过调用getListenable()可以注册监听

1
2
3
4
public void addListener(TreeCacheListener listener)
Add a change listener
Parameters:
listener - the listener

错误处理机制

Tree Cache 内部也注册了ConnectionStateListener.

坚持技术分享,您的支持将鼓励我继续创作!