08.Curator缓存
1.Path Cache
- PathChildrenCache - Path Cache主要实现类
- PathChildrenCacheEvent - 监听触发时的事件对象,包含事件相关信息
- PathChildrenCacheListener - 监听器接口
- ChildData - 子节点数据封装类
public PathChildrenCache(CuratorFramework client, String path, boolean cacheData)
public class PathCacheTest
{
private static final String PATH = "/example/cache";
public static void main(String[] args) throws Exception
{
CuratorFramework client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", new ExponentialBackoffRetry(1000, 3));
client.start();
PathChildrenCache cache = new PathChildrenCache(client, PATH, true);
cache.start();
PathChildrenCacheListener cacheListener = new PathChildrenCacheListener()
{
@Override
public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception
{
System.out.println("事件类型:" + event.getType());
System.out.println("节点数据:" + event.getData().getPath() + " = " + new String(event.getData().getData()));
}
};
cache.getListenable().addListener(cacheListener);
client.create().forPath("/example/cache/test01", "01".getBytes());
Thread.sleep(10);
client.create().forPath("/example/cache/test02", "02".getBytes());
Thread.sleep(10);
client.setData().forPath("/example/cache/test01", "01_V2".getBytes());
Thread.sleep(10);
for (ChildData data : cache.getCurrentData())
{
System.out.println("getCurrentData:" + data.getPath() + " = " + new String(data.getData()));
}
client.delete().forPath("/example/cache/test01");
Thread.sleep(10);
client.delete().forPath("/example/cache/test02");
Thread.sleep(1000 * 5);
cache.close();
client.close();
System.out.println("OK!");
}
}
事件类型:CHILD_ADDED
节点数据:/example/cache/test01 = 01
事件类型:CHILD_ADDED
节点数据:/example/cache/test02 = 02
事件类型:CHILD_UPDATED
节点数据:/example/cache/test01 = 01_V2
getCurrentData:/example/cache/test01 = 01_V2
getCurrentData:/example/cache/test02 = 02
事件类型:CHILD_REMOVED
节点数据:/example/cache/test01 = 01_V2
事件类型:CHILD_REMOVED
节点数据:/example/cache/test02 = 02
OK!
2.Node Cache
- NodeCache - Node Cache实现类
- NodeCacheListener - 节点监听器
- ChildData - 节点数据
public class NodeCacheExample
{
private static final String PATH = "/example/cache";
public static void main(String[] args) throws Exception
{
CuratorFramework client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", new ExponentialBackoffRetry(1000, 3));
client.start();
final NodeCache cache = new NodeCache(client, PATH);
cache.start();
NodeCacheListener listener = new NodeCacheListener()
{
@Override
public void nodeChanged() throws Exception
{
ChildData data = cache.getCurrentData();
if (null != data)
{
System.out.println("节点数据:" + new String(cache.getCurrentData().getData()));
}
else
{
System.out.println("节点被删除!");
}
}
};
cache.getListenable().addListener(listener);
client.create().creatingParentsIfNeeded().forPath(PATH, "01".getBytes());
Thread.sleep(10);
client.setData().forPath(PATH, "02".getBytes());
Thread.sleep(10);
client.delete().deletingChildrenIfNeeded().forPath(PATH);
Thread.sleep(1000 * 2);
cache.close();
client.close();
System.out.println("OK!");
}
}
节点数据:01
节点数据:02
节点被删除!
OK!
3.Tree Node
- TreeCache - Tree Cache实现类
- TreeCacheListener - 监听器类
- TreeCacheEvent - 触发的事件类
- ChildData - 节点数据
public class TreeCacheExample
{
private static final String PATH = "/example/cache";
public static void main(String[] args) throws Exception
{
CuratorFramework client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", new ExponentialBackoffRetry(1000, 3));
client.start();
TreeCache cache = new TreeCache(client, PATH);
cache.start();
TreeCacheListener listener = new TreeCacheListener()
{
@Override
public void childEvent(CuratorFramework client, TreeCacheEvent event) throws Exception
{
System.out.println("事件类型:" + event.getType() + " | 路径:" + event.getData().getPath());
}
};
cache.getListenable().addListener(listener);
client.create().creatingParentsIfNeeded().forPath("/example/cache/test01/child01");
client.setData().forPath("/example/cache/test01", "12345".getBytes());
client.delete().deletingChildrenIfNeeded().forPath(PATH);
Thread.sleep(1000 * 2);
cache.close();
client.close();
System.out.println("OK!");
}
}
事件类型:NODE_ADDED | 路径:/example/cache
事件类型:NODE_ADDED | 路径:/example/cache/test01
事件类型:NODE_ADDED | 路径:/example/cache/test01/child01
事件类型:NODE_UPDATED | 路径:/example/cache/test01
事件类型:NODE_REMOVED | 路径:/example/cache/test01/child01
事件类型:NODE_REMOVED | 路径:/example/cache/test01
事件类型:NODE_REMOVED | 路径:/example/cache
OK!
-------------------------------------------------------------------------------------------------------------------------------
08.Curator缓存的更多相关文章
- HTML5学习总结-08 应用缓存(Application Cache)
一 应用缓存(Application Cache) 1 应用缓存 HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问. 应用程序缓存为应用带来三个优势: ...
- 08 redis缓存穿透、缓存雪崩、缓存击穿
Redis缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面.但同时,它也带来了一些问题.其中,最要害的问题,就是数据的一致性问题,从严格意义上讲,这个问题无解.如果对数据的一致性要求很 ...
- Redis 慢日志
redis的slowlog是redis用于记录记录慢查询执行时间的日志系统.由于slowlog只保存在内存中,因此slowlog的效率很高,完全不用担心会影响到redis的性能.Slowlog是Red ...
- 08.Hibernate的一级缓存-->>Session
Hibernate提供了两种缓存: 1.一级缓存:自带的不可卸载的,一级缓存的生命周期与Session一致,一级缓存成为Session级别的缓存 2.二级缓存:默认没有开启,需要手动配置才可以使用,二 ...
- PowerDotNet平台化软件架构设计与实现系列(08):缓存平台
几乎所有后端应用都会或多或少用到缓存,尤其是分布式缓存服务,以及和本地缓存构造的二级缓存.根据我们一贯的节约代码的风格,为了复用的目标,抽象出缓存平台,进行缓存管理. 考虑到很多公司都会自己造或者直接 ...
- SpringBoot2.0 基础案例(08):集成Redis数据库,实现缓存管理
一.Redis简介 Spring Boot中除了对常用的关系型数据库提供了优秀的自动化支持之外,对于很多NoSQL数据库一样提供了自动化配置的支持,包括:Redis, MongoDB, Elastic ...
- Apache Curator获得真正的
Apache Curator获得真正的 Curator它是Netflix一家公司来源Zookeeper顾客,与Zookeeper相比于提供本地客户端,Curator的抽象层次更高,简化了Zookeep ...
- Apache Curator入门实战
Apache Curator入门实战 Curator是Netflix公司开源的一个Zookeeper客户端,与Zookeeper提供的原生客户端相比,Curator的抽象层次更高,简化了Zookeep ...
- Windows下Redis缓存服务器的使用 .NET StackExchange.Redis Redis Desktop Manager
Redis缓存服务器是一款key/value数据库,读110000次/s,写81000次/s,因为是内存操作所以速度飞快,常见用法是存用户token.短信验证码等 官网显示Redis本身并没有Wind ...
随机推荐
- selenium测试(Java)--下拉框(二十一)
例子: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title ...
- 全局结果集,带参数的结果集和动态结果集(struts2)
全局结果集: 当许多action都有共同的结果时,如果每个package都存在一个相同结果,会使得struts.xml比较臃肿,所以使用全局的结果集.一个包内的全局结果集可以通过包的继承而被其它包使用 ...
- 第二百八十二节,MySQL数据库-MySQL视图
MySQL数据库-MySQL视图 1.视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. 2.也 ...
- e664. 在图像中获取子图像
// From an Image image = createImage(new FilteredImageSource(image.getSource(), new CropImageFilter( ...
- 解决ERROR_INVALID_USER_BUFFER
我用CSocket编写了一个HTTP下载程序,接收数据大概如下: //...... //use CSocket class //send request... //...... ); ) { Zero ...
- VC++ 使用MSSOAP访问WebService天气服务(客户端开发)
绪论 本文介绍使用VC++编程实现访问天气Web服务的简单实例(例子来源于网络). Web天气服务 http://www.webxml.com.cn/WebServices/WeatherWebSer ...
- windows,cmd中查看当前目录下的文件及文件夹
需求描述: 在使用cmd的过程中,有的时候需要查看当前目录下有哪些文件或者文件夹,类似linux下的ls命令 操作过程: 1.通过dir命令查看当前目录下有哪些的文件及文件夹 备注:通过dir命令,就 ...
- c语言常用数据类型转换整理
你要发送原始数据流 还是 格式化输出? 如果是格式化 按原子说的 ,用sprintf / printf; 如果发送原始内存数据流, 可按下面发送, 发送 #define BYTE0(pointer) ...
- NHibernate连接oracle报错
NHibernate.Exceptions.GenericADOException:“could not execute query [ select sys_user0_.USERID as USE ...
- 从源代码来理解ArrayList和LinkedList差别
从源代码理解ArrayList和LinkedList差别 ArrayList ArrayList默认容量为10,实质是一个数组用于存放元素,size表示ArrayList所包括的元素个数. Array ...