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 ...
随机推荐
- j2se j2ee j2me
多数编程语言都有预选编译好的类库以支持各种特定的功能,在Java中,类库以包(package)的形式提供,不同版本的Java提供不同的包,以面向特定的应用. Java2平台包括标准版(J2SE).企业 ...
- selenium测试(Java)--截图(十九)
package com.test.screenshot; import java.io.File; import java.io.IOException; import org.apache.comm ...
- 平时收集的一些有关UED的团队和个人博客(转)
UCDChina导航 前端团队 阿里巴巴 UED -- 我们设计的界面,并没有几十亿的流量,但每天来自上百个国家的百万商人在使用着. 阿里巴巴中国站UED -- 阿里巴巴中国站UED成立于1999年, ...
- 支付宝 报错 rsa_private read error : private key is NULL解决方法
原因: 真机调试IOS支付宝功能GDB出现 rsa_private read error : private key is NULL提示 调试iOS 支付宝SDK的时候,执行demo.把 Partn ...
- 基于PhoneGap3.4框架的iOS插件的实现
Phonegap 提供了iOS 设备的基础特性接口来供HTML页面调用,可是这些基础接口不能满足我们的一些特殊需求,所以有时候我们须要开发插件来扩展其功能. 基于PhoneGap3.4框架的iOS插件 ...
- linux ,cron定时任务 备份mysql数据库
cron 定时任务执行备份脚本文件 backup.sh #!/bin/bash USER="root" PASSWORD="xxxxx" DATABASE=&q ...
- linux下 安装mysql教程
安装环境:系统是 centos6.5 1.下载 下载地址:http://dev.mysql.com/downloads/mysql/5.6.html#downloads 下载版本:我这里选择的5.6. ...
- windows,cmd中进行盘符的切换
需求描述: 在工作中,有的时候需要在cmd中进行盘符的切换,以前总有些时候 通过cd来切,就是切换不过去,每次都要进行百度查询,所以,这次就记录下, 留着以后再用. 操作过程: 1.通过win+r-& ...
- python编码问题1
爬虫,新手很容易遇到编码解码方面的问题.在这里总结下. 如果处理不好编码解码的问题,爬虫轻则显示乱码,重则报错UnicodeDecodeError: 'xxxxxx' codec can't deco ...
- MongoDB C#驱动中Query几个方法
Query.All("name", "a", "b");//通过多个元素来匹配数组 Query.And(Query.EQ("nam ...