OSCache分析

prometheus-openstack-exporter : 1、prometheus-openstack-exporter源码分析 1 引言 prometheus-openstack-exporter是用于提供openstack各组件服务状态信息给prometheus的项目。 该项目主要分为两部分: 1) 默认每隔30秒向openstack各组件发送请求,获取各个组件服务的状态并写入到缓存中。 2) 开启一个tcp服务器,prometheus默认每隔1分钟向该tcp服务器发送请求,该服务器会将缓存中的各组件服务状态信息 ... 阅读详情

1                 摘要

本文档介绍了如何在 Portlet 应用中使用 OSCache 进行页面内容缓存和对象缓存,分析了 OSCache 的实现原理,并提出了一个用来缓存对象和页面的简单易用的方案。本文档不涉及 OSCache 的安装与配置的内容,相关内容请参考 OSCache 的 在线文档 。

2                 OSCache 简介

OSCache标记库由OpenSymphony设计,它是一种开创性的缓存方案,它提供了在现有JSP页面之内实现内存缓存的功能。OSCache是个一个被广泛采用的高性能的J2EE缓存框架,OSCache还能应用于任何Java应用程序的普通的缓存解决方案。

OSCache有以下特点:

l      缓存任何对象:你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。

l      拥有全面的API:OSCache API允许你通过编程的方式来控制所有的OSCache特性。

l      永久缓存:缓存能被配置写入硬盘,因此允许在应用服务器的多次生命周期间缓存创建开销昂贵的数据。

l      支持集群:集群缓存数据能被单个的进行参数配置,不需要修改代码。

l      缓存过期:你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(如果默认性能不能满足需要时)。

3                 OSCache 缓存原理简介

Cache Factory

Cache Proxy

Cache Map

Memory

Disk

 

Listeners

Cache Entry

图 3-1 OSCache 架构概览

Cache Factory :该实体负责获得 Cache Proxy ,兼有一些对 Cache Proxy 的管理功能。对应到现在的 OSCache 实现中的类是: GeneralCacheAdministrator 和 ServletCacheAdministrator 。

Cache Proxy :该实体是 Cache Map 的代理,它主要负责从 Cache Map 中取得 / 存储指定的缓存对象,如果缓存对象过期,那么就将缓存刷新,并向指定的监听者发送存 / 取事件。对应到现在的 OSCache 实现中的类是: Cache 和 ServletCache 。

Cache Map :该实体存储了所有的缓存实体,是一个 OSCache 专有的 Map 实现,它能根据指定的算法清除缓存,以及将缓存持久化到磁盘中。对应到现在的 OSCache 实现中的类是: FIFOCache , LRUCache 和 UnlimitedCache 。

Listeners : OSCache 存 / 取事件的监听者实体。对应到现在的 OSCache 实现中的类是: CacheEntryEventListener 和 CacheMapAccessEventListener 。

Cache Entry :表示缓存对象的包装实体,它包装了缓存对象和刷新策略。对应到现在的 OSCache 实现中的类是: CacheEntry 。

3.1           应用场景

一个典型的“缓存对象”场景是:

应用调用 Cache Factory 获得 Cache Proxy ,然后应用将要缓存的对象以及刷新策略通过 Cache Proxy 存储到 Cache Map 中,并通知各个 Listener 。

一个典型的“取得缓存对象”的场景是:

应用调用 Cache Factory 获得 Cache Proxy ,然后给 Cache Proxy 的相应方法传入要获得的缓存对象的 key , Cache Proxy 会根据指定的刷新策略判断缓存是否过期,如果缓存没有过期,则返回缓存对象,如果缓存过期,则刷新缓存,并向应用层抛出需要刷新的异常( NeedsRefreshException ),应用如果收到此异常,将重新计算内容并将内容缓存。

 

4                 Web 应用中的缓存方案

4.1           假定

OSCache 现有的缓存刷新策略(超过指定时间后自动过期,超过指定日期后自动过期,按照克龙表达式的设定自动过期)不能满足需求。现有应用要求:当数据源的部分内容更新后,能够使相关缓存过期,展现页面从数据源取得更新的内容显示。

4.2           方案应用场景

该方案为下列场景提供了支持:

1. 缓存整个 Response ,能够定制刷新指定的 Response 。

2. 缓存 JSP 页面内容,能够定制刷新指定的缓存内容。

3. 缓存对象,能够定制刷新指定的缓存对象。

4.3           配置

4.3.1           配置 ***CacheFilter

在 Web 应用的 web.xml 中添加下面的内容:

< filter>

              < filter-name>CacheFilter</filter-name>

              < filter-class>

                     com.***.portal.oscache.***CacheFilter

              </ filter-class>

              < init-param>

                     < param-name>time</param-name>

                     < param-value>-1</param-value>

              </ init-param>

              < init-param>

                     < param-name>scope</param-name>

定制这个 fileter 缓存的 response 的组

                     < param-value>application</param-value>

              </ init-param>

              <init-param>

                     <param-name>groups</param-name>

                     <param-value> landy </param-value>

              </init-param>

       </ filter>

< filter-mapping>

              < filter-name>CacheFilter</filter-name>

              < url-pattern>/ landy </ url-pattern>

       </ filter-mapping>

注意:

为了在部分数据更新时只刷新部分 Response , ***CacheFilter 比 OSCache 提供的 CacheFitler 增加了一个可配置的参数:“ groups ”,部署者可以通过这个参数配置这个 filter 所映射的 URLS 的组(通常同一个组的 URL 会从同时更新的数据源取数据),这样当数据源某部分更新之后,我们就可以刷新从这部分数据源取数据的 URLs 。该配置项支持配置多个组,以逗号作为分隔符,如:“ group1,group2 ”。

其他的配置项说明请参考 OSCache 在线文档的 CacheFilter 配置部分 。

4.4           缓存整个 Response

OSCache 提供的 CacheFilter 能够缓存 Response ,但不能供应用选择性的刷新某些 Response ,而 ***CacheFilter 就能支持这一特性。

4.4.1           使用方法

您可以按照以下的方式刷新某一组( Filter 初始化参数中 groups 参数配置的内容)的 Responses:

ServletCacheAdministrator admin = null;

Filter 初始化参数中 scope 参数配置的内容

 

admin = ServletCacheAdministrator.getInstance(config

                           .getServletContext());

Filter 初始化参数中 groups 参数配置的内容

Cache cache = admin.getCache(httpRequest, cacheScope);

cache. flushGroup(group);

4.4.2           约束

这种方案仅适用于普通的 web 应用,不适用于 Portlets 应用,因为在 Portlets 应用中,每个 Portlet 都是页面上一个可插拔的组件,如果被缓存的 Response 代表的页面中某个 Portlet 被删除了,那么这个页面产生的 Response 就会不一样,而这时应用却无法刷新缓存的 Response 。

4.5           缓存 JSP 页面内容

可以在 JSP 页面中将要缓存的内容置于 <cache></cache> 标签之间,当更新数据源的事件产生时,在处理事件的方法中加入如下代码即可:

***OSCacheUtil.getInstance().flushGroup("group1");

4.5.1           样例

我要缓存一个从数据源的 A 表取数据的 JSP 内容段,如下表所示:

<oscache:cache key="foobar" scope="application" time="-1" groups="group1" >

//business code

Select * from table A and Display

</oscache:cache>

数据源更新了,在处理数据更新事件的代码中,我加入下表的代码:

***OSCacheUtil.getInstance().flushGroup("group1");

这样就可以刷新缓存的 group1 组的数据了。

4.5.2           约束

本方案在满足了 4.1 描述的需求的条件下,仅支持选择性的刷新存储在 application 域( cache 标签中 scope 属性配置为 application )的缓存。为什么不支持选择性的刷新 session 域的缓存呢?是因为数据更新的事件产生是随机的,当数据更新事件发生时,我们无法得到 web 服务器中的每个 session ,所以不能支持选择性的刷新 session 域的缓存。

4.6           缓存对象

可以在 web 应用的业务处理逻辑中将要缓存的对象采用如下的方式将对象缓存到 application 域中:

***OSCacheUtil.getInstance().putInCache(key, content, new String[]{“group1”});

当更新数据源的事件产生时,在处理事件的方法中加入如下代码即可:

***OSCacheUtil.getInstance().flushGroup("group1");

4.6.1           约束

同 4.5.2 一致。

 

5                 Demo

5.1           方案框架

包括 ***CacheFilter 和 ***OSCacheUtil 。

5.2           测试用例(基于 portlet )

用例 src :

用例 ear :

参考资料:

[1] http:/www.opensymphony.com/oscache/

oscache缓存配置 NULL 博文链接:https://yanxiansheng.iteye.com/blog/1636690 立即下载

相关推荐

Oscache使用教程

Oscache使用教程,基础教程。详细介绍几本原理以及几本配置。

OSCache介绍

1、OSCache是什么?      OSCache标记库由OpenSymphony设计,它是一种开创性的缓存方案,它提供了在现有JSP页面之内实现内存缓存的功能。OSCache是个一个被广泛采用的高性能的J2EE缓存框架,OSCache还能应用于任何Java应用程序的普通的缓存解决方案。 2、OSCache的特点     (1) 缓存任何对象:你可以不受限制的缓存部分jsp页面或HTTP请

弹指天下 1413

oscache,缓存机制的使用

oscache,java,缓存机制的使用

OSCache简介

一.OSCache简介    OSCache是OpenSymphony这个开源项目众多Projects中的一个。他是一个高效的J2EE缓存框架,能够很好的解决动态网站速度的问题。下面来看下OSCache解决了动态网站的哪些令人郁闷的问题。1.缓存动态内容:其实我们的动态网页上一般只有一部分是动态的(表头,表尾一般是不变的),如果我们缓存整个网页显然不成,因为有部分是随着请求有可能变的。OSCa...

开发笔记 293

从MRF8P9040N数据手册到ADS仿真:手把手教你搞定LDMOS功放设计(附完整模型下载)

本文详细解析了MRF8P9040N LDMOS功率放大器的数据手册关键参数,并提供了在ADS中进行仿真的完整指南。从模型导入、直流工作点验证到负载牵引与阻抗匹配设计,逐步指导工程师完成高效功放设计。文章还包含调试技巧和常见问题解决方案,帮助优化射频功放性能。

weixin_27015733的博客 490

【COMSOL】将一个面上数据导出CSV或txt格式的方法

在COMSOL中参数化扫描后,把一个面上或体里的数据按照CSV或TXT格式导出的方法。

dave496206的博客 2991

Oscache缓存总结

基本概述 OSCache标记库由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能。OSCache是个一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案。 OSCache的特点: 缓存任意对象:可以不受限制的缓存JSP的一部分或是Http请求,任何的Java对象都可以被缓存。 ...

xiongyouqiang的博客 680

Yolov5s/Yolov8s网络结构图

yolov8、yolov5网络结构图

Goodness2020的博客 9925

缓存框架OSCache部分源码分析

在并发量比较大的场景,如果采用直接访问数据库的方式,将会对数据库带来巨大的压力,严重的情况下可能会导致数据库不可用状态,并且时间的消耗也是不能容忍的,尤其对于某些获取起来比较昂贵的数据。在这种情况下,一般采用缓存的方式。将经常访问的热点数据提前加载到内存中,这样能够大大降低数据库的压力。  OSCache是一个开源的缓存框架,虽然现在已经停止维护了,但是对于OSCache的实现还是值得学习和借鉴

一梦一程-记录学习点滴 1355

华为OD机考双机位C卷 - 虚拟理财游戏(Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 虚拟理财游戏(OD上机考试双机位C卷)。提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 668

手把手教你学simulink(16.10)-- 基于Simulink的IIR滤波器(Infinite Impulse Response Filter)项目

基于Simulink的IIR滤波器(Infinite Impulse Response Filter)项目的详细实例介绍。这个项目将重点放在IIR滤波器的设计、实现和仿真上,帮助你理解和应用IIR滤波器在信号处理中的作用。

MHD0815的博客 706

OSCache 应用与源码分析

缓存配置oscache.properties cache.memory 是否使用内存缓存; true 或 false。默认为true; 如设置为false,那cache只能缓存到数据库或硬盘中。 cache.capacity 缓存的最大数量。默认是不限制,cache不会移走任何缓存内容。负数也被视不限制。 cache.algorithm 运算规则。为了使...

265

安卓刷Windows太难?这款手机平板双系统刷机工具,小白也能轻松拿捏!(小白福音!手机平板专用,一键搞定安卓刷 Windows 双系统!)

安卓刷Windows太难?这款手机平板双系统刷机工具,小白也能轻松拿捏!(小白福音!手机平板专用,一键搞定安卓刷 Windows 双系统!)

XiaoqiangClub的博客 4677

[Java] oscache 多线程 工作流程的分析

Oscache analysis and  possible suspend scenario           

梦里飞翔的天空 1302

高通GAIA V3命令参考手册的研读学习(15):自定制命令的详细工作描述

里的示例一样,手机APP发出这个GetManuFacturer的命令发0x0000,那么耳机回复:0x8000, 同时在回复的playload部分,用最多15个字节的ACSII码来表达制造商信息(因此最多15个字母)。那么这个APP在通过GAIA协议控制这个耳机时,不仅可以通过前面讲过的vendor ID来识别,也可以更进一步通过这个命令来识别这个耳机,到底是不是本公司的。通过这个可变长度的playload,真的是可以传达极多的事先约定的信息,相当的灵活,真是不错!这个命令用来得到设备的制造商信息。

qq_37191547的博客 399

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

用OSCache进行缓存对象

1、OSCache是什么?      OSCache标记库由OpenSymphony设计,它是一种开创性的缓存方案,它提供了在现有JSP页面之内实现内存缓存的功能。OSCache是个一个被广泛采用的高性能的J2EE缓存框架,OSCache还能应用于任何Java应用程序的普通的缓存解决方案。 2、OSCache的特点     (1) 缓存任何对象:你可以不受限制的缓存部分jsp页面或HTTP请

一亩三分地 4003

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

oscache

Oscache实现的原理,基于map的扩展,通过jgroup等UDP jar包进行各点间的通信。Oschche没有通知过来后的操作,我们需要重写JavaGroupsBroadcastingListener的增删改和handleClusterNotification方法。                1:关于oscache的不足: a 获取的value不是副本,所以在缓存之外的代码有机会修改...

心里打结,为了过得舒服点,只好拼命的开结 117

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

OSCache 缓存重建在 Race Condition 下的 NRE 问题

@郑昀汇总 一,现象: 高并发情况下,使用 OSCache 作为本地缓存中间件的前端服务,日志文件中会出现大量如下错误信息: 异常堆栈...

chuanxinhu2060的博客 217

oscache 的问题

一:现象: 系统页面无法打开,数据显示异常 二:原因分析:(代码分析,比较枯燥,请耐心查看)   在使用oscache的时候,为了减轻开发者的负担,同时也让代码具有更好的可读性,我们一般会使用annotation的方式来完成缓存的设值和取值 Code:1   在调用当前方法的时候 会调用annotation拦截器的方法进行拦截,然后将返回值设置到缓存系统并返回。调研系统ann...

深地税发 270
上一篇: Eclipse插件使用links目录的用法
下一篇: Getting Your Feet Wet with the SWT
foxcai
博客等级 码龄24年 64粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值