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(){@Overridepublic 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_V2getCurrentData:/example/cache/test01 = 01_V2getCurrentData:/example/cache/test02 = 02事件类型:CHILD_REMOVED节点数据:/example/cache/test01 = 01_V2事件类型:CHILD_REMOVED节点数据:/example/cache/test02 = 02OK!
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(){@Overridepublic 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(){@Overridepublic 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/cacheOK!
-------------------------------------------------------------------------------------------------------------------------------
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 ...
随机推荐
- Windows消息队列一
系统消息--ID范围 -0x03FF 由系统定义好的小哦啊拍下哦,可以在程序中直接使用. 用户自定义消息--ID范围0x0400-0x7FFF 由用户自己定义,满足用户自己的需求.由用户自己发出消息, ...
- 关于在Android中添加事件监听器的方法
一.匿名内部类 1.先找到那个控件(初始化) private Button bt1; //onCreate方法外 bt1 = (Button)findViewById(R.id.button1); ...
- Java获取yahoo天气预报
学习闲暇之余,写了个获取yahoo天气预报的java小程序,仅供娱乐. 首先我们需要获取您需要查询城市对应的代号,我们可以用HashMap来查询,代码如下: publicstatic HashMap& ...
- Spring Boot集成Mybatis及通用Mapper
集成Mybatis可以通过 mybatis-spring-boot-starter 实现. <!-- https://mvnrepository.com/artifact/org.mybatis ...
- Python3.4下使用sqlalchemy
一. 1.用sudo apt-get install python3-numpy之后,会默认把numpy安装到 /usr/lib/python3/dist-packages目录下,而且版本比较低. ...
- (转)x264代码详细阅读之x264.c,common.c,encoder.c
转自:http://alphamailpost.blog.163.com/blog/static/201118081201281103931932/ x264代码详细阅读第一之x264.chttp:/ ...
- (转)非阻塞Connect对于select时应注意问题
对于面向连接的socket类型(SOCK_STREAM,SOCK_SEQPACKET)在读写数据之前必须建立连接,首先服务器端socket必须在一个客户端知道的地址进行监听,也就是创建socket之后 ...
- Codeforces Round #Pi (Div. 2) —— D One-Dimensional Battle Ships
题目的意思是: 如今有一个长度为n,宽为1的方格,在上面能够放大小为1*a船,然后输入为n,k,a.分别为平地的大小,船的数量,船的长度. 一个叫alice的人已经在地图上摆好了船的位置. 然后bob ...
- 谈谈我对Android View事件分发的理解
写这篇博客的缘由.近期因为项目中用到相似一个LinearLayout中水平布局中,有一个TextView和Button,然后对该LinearLayout布局设置点击事件.点击TextView能够触发该 ...
- 原生js获取元素样式
摘要: 我们在开发过程中经常会遇到通过js获取或者改变DOM元素的样式,方法有很多,比如:通过更改DOM元素的class.现在我们讨论原生js来获取DOM元素的CSS样式,注意是获取不是设置 在开始之 ...