分布式缓存与javaee - oracle cloud … · •纯java 1.4.2+ 的类库 •纯.net 1.1...
TRANSCRIPT
![Page 1: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/1.jpg)
<Insert Picture Here>
分布式缓存与JavaEE---------介绍Oracle Coherence
![Page 2: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/2.jpg)
日程安排
• 什么是缓存
• 为什么要用分布式缓存
• 分布式缓存的特性
• Oracle Coherence的介绍
• 其他的分布式缓存介绍• Terracotta,Memecached,MySQL Cluster,Dynamo
(Cassandra) ,JBoss Cache
![Page 3: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/3.jpg)
什么是缓存
![Page 4: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/4.jpg)
缓存的定义(在BIOS系统工程师眼里)
![Page 5: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/5.jpg)
缓存的定义(文件系统工程师)
![Page 6: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/6.jpg)
缓存的定义(磁盘驱动开发工程师)
![Page 7: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/7.jpg)
缓存的定义(Web工程师)
![Page 8: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/8.jpg)
JavaEE中的缓存
• JSR107 JCACHE-Java Temporary Caching API
• Jakarta 的标准项目: Cache Taglib• 缓存页面
• 缓存对象
• ORM (Hibernate,Toplink) 缓存
• 数据库层的缓存
• 业务对象的缓存
![Page 9: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/9.jpg)
缓存的原则
以提高性能为目的
维护缓存的代价要小于创建原始对象的代价
![Page 10: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/10.jpg)
如何提高系统的性能
![Page 11: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/11.jpg)
如何提高性能--各个层面的应用优化
Java EE 应用编程
Java EE应用服务器
Java 虚拟机
操作系统
硬件(网卡,CPU,内存)
![Page 12: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/12.jpg)
(c) Copyright 2010. Oracle Corporation
![Page 13: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/13.jpg)
如何提高性能
•横向扩展 (Scaling Out)
![Page 14: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/14.jpg)
如何获得可扩展性• 纵向扩展(Scaling Up)
• 增加CPU,内存,升级到更强大昂贵的系统
• 但是受单台服务器的限制
• 横向扩展 (Scaling Out)• 增加节点,使用便宜的服务器
• 应用系统的复杂性 (有状态的应用---无状态的应用)
• 无状态的应用几乎不存在
• 大多数的无状态的应用将状态放在数据库中
• 其实数据库更加难以扩展
• ACID (很多Lock,读写一致性,写的持久性)
• 分布式数据库(集群数据库)机制复杂,价格昂贵
![Page 15: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/15.jpg)
数据库横向扩展方案--复制• Master用于写操作
• Slave用于读操作
• 缓解Master的读操作
• 有不一致的时间窗口
• 不能解决大量写的操作
![Page 16: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/16.jpg)
数据库横向扩展方案--集群
• Oracle RAC
• 共享存储
• 负载均衡读和写
• 数据库写需要同步到所有节点的内存中,大大增加了写的时间延迟
• 增加了资源竞争
• 节点数量有限制
• 读和写都不能理想的扩展
![Page 17: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/17.jpg)
数据库横向扩展方案--Sharding• Share nothing
• 数据垂直分区
• 不同的节点放置不同的数据库
• 单个节点的处理能力有限制
![Page 18: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/18.jpg)
数据库横向扩展方案--Sharding
• Share nothing (Google, FaceBook, Flickr)
• 数据水平分区(MySQL Cluster)
• 分区的逻辑和数据一致性保证放到数据访问层
• 数据迁移代价大
• 查询和统计变得复杂,join操作是噩梦(数据冗余)
• 一个数据库操作可能转化为多个XA操作
![Page 19: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/19.jpg)
NOSQL 方案
• 高并发读写,海量存储的需求增加
• 对数据一致性要求减少(最终一致性)
• GFS,BigTable,MapReduce
• Hadoop开源实现
• Redis,Tokyo, Cassandra(SimpleDB),MongoDB, Hbase,CouchDB,Dynamo
![Page 20: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/20.jpg)
满足企业应用的需求
• 数据的严格一致性和事务性
• 传统的数据库开发模式
• 复杂的关联查询条件
• 高性能和高扩展性
• 大量的读写操作都是基于(Primary Key)的。
• 简单可行的解决方案--缓存
![Page 21: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/21.jpg)
为什么使用分布式缓存?
![Page 22: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/22.jpg)
未使用缓存的应用
![Page 23: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/23.jpg)
使用非分布式缓存
![Page 24: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/24.jpg)
什么是分布式缓存
![Page 25: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/25.jpg)
未使用缓存的数据库开销
![Page 26: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/26.jpg)
使用分布式缓存的数据库开销
Cache
![Page 27: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/27.jpg)
分布式缓存的特性?
![Page 28: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/28.jpg)
分布式系统的特性
• 数据分区技术
• Consistent Hash
• 数据的一致性保证
• 集群的成员维护和失败检测
• 集中式管理还是分布式管理
• 错误恢复技术
• 临时故障和永久故障
![Page 29: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/29.jpg)
什么是 Coherence?
![Page 30: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/30.jpg)
Oracle Coherence
• 在内存中的数据网格(Data Grid)
• 水平扩展(Scale out)的解决方案• 消除数据库的性能瓶颈
• (Key Value对)的存储方案
• 开发工具包• 纯Java 1.4.2+ 的类库
• 纯 .Net 1.1 和 2.0的客户端类库
• 无第三方包的依赖关系
• 不依赖于任何开源产品和项目
• 用于其它用途的库文件…• 数据库和文件系统的集成
• 与Top Link和Hibernate的集成
• 与Http Session管理, Spring之间的集成, …
![Page 31: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/31.jpg)
Coherence是为了解决性能问题• 在一个分布式系统中,性能由很多因素决定:
• CPU的快慢,算法的好坏,IO....• 应用层的Cache
• 网络延迟• Cache,NearCache
• 网络带宽限制• 获取大量数据,经过计算,存储到数据库
• 获取大量数据,经过计算,只显示一小部分
• 可扩展性• 数据库的扩展性
• 并行计算• 海量数据分析
![Page 32: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/32.jpg)
Coherence是为了解决性能问题
• 许多典型应用的数据库查询是基于主键的查询,将这些查询放到Coherence缓存中,会大大降低数据库的负载
• Coherence分布式Cache本身具有扩展性和高可用性,解放数据库,让它做擅长的事情:存储和复杂查询
• 有了Coherence,不需要数据库复制的方案。只读的Slave完全可以被分布式Cache所替代
• 所有的写操作,一致性有Coherence来保证。数据被异步的持久化到数据库,将数据库的负担降到最低
• 分布式的查询和统计函数可以弥补一些Sharding带来的问题
• 特有的功能降低数据的延迟时间和减少带宽(NearCache,EntryProcessors)
![Page 33: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/33.jpg)
Oracle Coherence的典型用途
• 应用层面的状态数据缓存• 减轻底层系统的负载
• 数据库,主机系统,Web服务器, Web Services
• Http Session内存复制
• 横向扩展应用的状态
• 应用集群以及可靠的数据共享
• 弹性计算引擎
• 基于事件的处理引擎
• 并行处理引擎(类相于MapReduce)
• 极限事物处理引擎• 存储临时的系统数据,获得极限事物处理能力
![Page 34: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/34.jpg)
Coherence的基本概念
![Page 35: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/35.jpg)
Cache的拓扑1:Replicated
![Page 36: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/36.jpg)
Cache的拓扑1:Replicated
![Page 37: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/37.jpg)
Replicated 数据管理
• 成员对所有节点都有逻辑的访问• 对读访问非常快,始终在本地
• 对写(更新)操作,性能跟节点数量相关
• 容错性非常好
• 可以确定的访问和不可预测的更新行为
• 不可以预测的扩展性• Cache 的容量跟最小节点相同
• 适用于小数据尺寸
• 适用于大部分只读的数据
![Page 38: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/38.jpg)
(c) Copyright 2010. Oracle Corporation
![Page 39: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/39.jpg)
(c) Copyright 2010. Oracle Corporation
![Page 40: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/40.jpg)
(c) Copyright 2010. Oracle Corporation
![Page 41: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/41.jpg)
Distributed 数据管理
• 成员对所有节点都有逻辑的访问• 对读访问,最多两个网络操作
• 对写(更新)操作,最多4个网络操作
• 与节点多少没有关系
• 可以确定的访问和更新的行为
• 可以预测的扩展性• Cache 的容量随着节点增加变大
• Coherence对自动对数据的分片进行负载均衡
• 点对点的通讯
• 并不要求multicast
![Page 42: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/42.jpg)
对数据变化进行监控
![Page 43: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/43.jpg)
并行查询
![Page 44: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/44.jpg)
(c) Copyright 2010. Oracle Corporation
![Page 45: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/45.jpg)
(c) Copyright 2010. Oracle Corporation
![Page 46: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/46.jpg)
(c) Copyright 2010. Oracle Corporation
![Page 47: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/47.jpg)
(c) Copyright 2010. Oracle Corporation
![Page 48: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/48.jpg)
Coherence 代码示例
![Page 49: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/49.jpg)
Cluster cluster =
CacheFactory.ensureCluster();
加入和离开
CacheFactory.shutdown();
![Page 50: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/50.jpg)
使用缓存get, put, size & remove
NamedCache nc = CacheFactory.getCache(“mine”);
Object previous = nc.put(“key”, “hello world”);
Object current = nc.get(“key”);
int size = nc.size();
Object value = nc.remove(“key”);
![Page 51: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/51.jpg)
使用缓存keySet, entrySet, containsKey
NamedCache nc = CacheFactory.getCache(“mine”);
Set keys = nc.keySet();
Set entries = nc.entrySet();
boolean exists = nc.containsKey(“key”);
![Page 52: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/52.jpg)
监听缓存事件ObservableMap
NamedCache nc =
CacheFactory.getCache(“stocks”);
nc.addMapListener(new MapListener() {
public void onInsert(MapEvent mapEvent) {
}
public void onUpdate(MapEvent mapEvent) {
}
public void onDelete(MapEvent mapEvent) {
}
});
![Page 53: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/53.jpg)
缓存查询QueryMap
NamedCache nc =
CacheFactory.getCache(“people”);
Set keys = nc.keySet(
new LikeFilter(“getLastName”,
“%Stone%”));
Set entries = nc.entrySet(
new EqualsFilter(“getAge”,
35));
![Page 54: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/54.jpg)
统计操作InvocableMap
NamedCache nc =
CacheFactory.getCache(“stocks”);
Double total = (Double)nc.aggregate(
AlwaysFilter.INSTANCE,
new DoubleSum(“getQuantity”));
Set symbols = (Set)nc.aggregate(
new EqualsFilter(“getOwner”, “Larry”),
new DistinctValue(“getSymbol”));
![Page 55: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/55.jpg)
有条件修改操作NamedCache nc = CacheFactory.getCache(“stocks”);
nc.invokeAll(
new EqualsFilter(“getSymbol”, “ORCL”),
new StockSplitProcessor());
...
class StockSplitProcessor extends
AbstractProcessor {
Object process(Entry entry) {
Stock stock = (Stock)entry.getValue();
stock.quantity *= 2;
entry.setValue(stock);
return null;
}
}
![Page 56: 分布式缓存与JavaEE - Oracle Cloud … · •纯Java 1.4.2+ 的类库 •纯.Net 1.1 和2.0的客户端类库 •无第三方包的依赖关系 •不依赖于任何开源产品和项目](https://reader034.vdocuments.mx/reader034/viewer/2022042510/5f5a42397626231852738525/html5/thumbnails/56.jpg)
(c) Copyright 2010. Oracle Corporation