(注:相关代码请参考 com.ql.util.express.test.ExpressCacheTest类,
QLExpress 源代码下载地址:http://code.taobao.org/p/QLExpress/src/ )
1、QLExpress的缓存带来的好处:
自带了一个本地缓存,用于缓存指令集,已减少编译阶段的时间消耗。
@Test
public void testScriptCache() throws Exception {
runner.addMacro("计算平均成绩", "(语文+数学+英语)/3.0");
IExpressContext<String, Object> context =new DefaultContext<String, Object>();
context.put("语文", 88);
context.put("数学", 99);
context.put("英语", 95);
long times =10000;
long start = new java.util.Date().getTime();
while(times-->0){
calulateTask(false, context);
}
long end = new java.util.Date().getTime();
echo("不做缓存耗时:"+ (end-start) +" ms");
times =10000;
start = new java.util.Date().getTime();
while(times-->0){
calulateTask(true, context);
}
end = new java.util.Date().getTime();
echo("做缓存耗时:"+ (end-start) +" ms");
}
private void echo(Object obj){
System.out.println(obj);
}
private void calulateTask(boolean isCache, IExpressContext<String, Object> context) throws Exception{
runner.execute("计算平均成绩", context, null, isCache, false);
}
实验结果:效果是非常明显的!
不做缓存耗时:890 ms
做缓存耗时:22 ms
2、ExpressRunner 自带的缓存
在同一个ExpressRunner执行器内是全局的,脚本间也可以相互调用,非常的强大。
适用场景:业务逻辑非常复杂,但是全局统一,业务逻辑需要很高的复用性。
@Test
public void testLocalCacheMutualImpact()throws Exception {
//缓存在本地的脚本都是全局的,可以相互调用
runner.addMacro("计算平均成绩", "(语文+数学+英语)/3.0");
runner.addMacro("是否优秀", "计算平均成绩>90");
IExpressContext<String, Object> context =new DefaultContext<String, Object>();
context.put("语文", 88);
context.put("数学", 99);
context.put("英语", 95);
echo(runner.execute("是否优秀", context, null, false, false));
}
3、独立于ExpressRunner的外部缓存处理器
适用场景:业务逻辑相对简单,脚本只依赖系统函数,不相互依赖,需要比较高的脚本隔离性和安全性,避免相互影响。
@Test
public void testRemoteCache(){
//数据的预先加载
ExpressRunner runner =new ExpressRunner();
ExpressRemoteCacheRunner cacheRunner = new LocalExpressCacheRunner(runner);
cacheRunner.loadCache("计算平均成绩", "(语文+数学+英语)/3.0");
cacheRunner.loadCache("是否优秀", "计算平均成绩>90");
IExpressContext<String, Object> context =new DefaultContext<String, Object>();
context.put("语文", 88);
context.put("数学", 99);
context.put("英语", 95);
//ExpressRemoteCacheRunner都只能执行自己原有的脚本内容,而且相互之间隔离,保证最高的脚本安全性
echo(cacheRunner.execute("计算平均成绩", context, null, false, false, null));
try{
echo(cacheRunner.execute("计算平均成绩>90", context, null, false, false, null));
}catch(Exception e){
echo("ExpressRemoteCacheRunner只支持预先加载的脚本内容");
}
try{
echo(cacheRunner.execute("是否优秀", context, null, false, false, null));
}catch(Exception e){
echo("ExpressRemoteCacheRunner不支持脚本间的相互调用");
}
}
总结下:
1、缓存主要是将 文本-》生成指令集 这个过程缓存起来,所以ExpressRunner的编译执行的,但是编译过程又属于表达式类型脚本,只要符合定义的语法规范即可。
2、ExpressRunner自带的缓存会全局保存,每一次脚本执行的时候可以依赖到以前的指令。
3、ExpressRemoteCacheRunner每一次load脚本的时候,只将本次编译好的指令集缓存起来,可以放在本地也可以放入远程的缓存系统中(如淘宝的 tair 等),所以牺牲了复用性,得到了安全性和独立性。
分享到:
相关推荐
QLExpress脚本引擎被广泛应用在阿里的电商业务场景,具有以下的一些特性: 1、线程安全,引擎运算过程中的产生的临时变量都是threadlocal类型。 2、高效执行,比较耗时的脚本编译过程可以缓存在本地机器,运行时的...
该书详细介绍了2006年时的脚本技术,涵盖多种脚本语言及其在IT领域的应用。CHM文件是一种常见于Windows平台的电子文档格式,它将HTML页面、图像和其他资源打包成单一的可执行文件,方便用户离线阅读和搜索。 在脚本...
简单明了的shell脚本语言讲义,让你轻松了解shell语言。
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个 BAT批处理脚本-实用的批处理文件-70个 BAT批处理脚本-提示窗口进度条-17个 BAT批处理脚本-数值计算-23个 BAT批处理脚本-文件相关操作-92个 BAT...
QLExpress是一种强大、轻量级且动态的编程语言,它为开发者提供了高效的代码编写和执行环境。QLExpress的设计目标是简化编程过程,提高开发效率,同时保持灵活性和可扩展性。这种语言通常适用于快速开发、脚本编写...
obs-文本-脚本 date-and-time.lua
### Linux-定期清内存缓存-shell脚本 #### 背景与意义 在Linux系统中,内存资源的管理非常重要。随着系统运行时间的增长,内存中的缓存数据可能会占用大量空间,导致可用内存减少,从而影响系统的性能。为了确保...
WMI脚本是IT管理员和开发者的有力工具,通过学习和掌握WMI,可以实现对Windows系统的深度管理和自动化,提高工作效率,解决复杂的问题。无论你是运维人员还是程序员,理解并运用WMI脚本都是提升技能的重要一步。
使用/ dev / usb / lp0设备句柄) 声称支持以下打印机(✓表示经过作者或贡献者验证的打印机): QL-500(✓),QL-550(✓),QL-560(✓),QL-570(✓),QL-580N,QL-650TD,QL-700(✓),QL-710W(✓), QL-...
Hyper-V 是微软提供的一种虚拟化技术,主要用于在Windows操作系统上创建和管理虚拟机。这个"一键安装 Hyper-V 脚本"(Hyper-V.bat)是一个方便用户快速在Windows家庭版上安装Hyper-V组件的自动化工具。通常,Hyper-V...
**批处理**(Batch Scripting),是一种计算机编程语言,它允许用户创建一系列预定义命令的脚本文件,以实现自动化任务的执行。在Windows操作系统中,这种脚本通常被称为**批处理脚本**,其文件扩展名为`.bat`或`....
Linux 内核CVE-2024-1086漏洞复现脚本。 在普通用户下,将文件上传后,chmod 777 exploit ,然后运行 ./exploit ,提权成功,输入id,可看到已经是root权限 。
magic-script是一款基于JVM的脚本语言,目前主要是为magic-api项目设计。magic-api,接口快速开发框架,通过Web页面配置,自动映射为HTTP接口;spider-flow,新一代爬虫平台,以图形化方式定义爬虫流程,不写代码...
仅供学习。勿用商业。谢谢合作。漏洞验证脚本ssl-deacth-alert(cve-2016-8610)
《3ds MAXScript脚本语言完全学习手册》是一本全面介绍MAXScript脚本语言的教程,不仅适合于初学者学习基础知识,也适合于专业人士深入了解高级功能和技术细节。通过本书的学习,读者将能够有效地利用MAXScript提升...
奔梦向前:学编程其实很简单,html、css、JavaScript、html5、css3、vue、Canvas实现网页特效页面、新手入门学习、了解网页动画的制作、代码实现网页动态画面-脚本循环代码-2020-04-28-2。
360独家防注入跨站脚本攻击漏洞补丁是针对PHP、ASP和JSP这三种主流服务器端脚本语言开发的安全解决方案,旨在帮助网站开发者和管理员保护他们的应用免受此类攻击。 1. **PHP防注入:** PHP是Web开发中广泛使用的...
文件结构 -docker ---------MaiARK.sh -----------------一键安装MaiARK脚本 ---------ql.sh -----------------一键安装青龙面板脚本
### Linux系统缓存清理脚本知识点详解 #### 一、概述 在Linux系统运维工作中,定期清理系统缓存是一项非常重要的任务。缓存虽然能够提高数据读取速度,但随着时间的推移,缓存文件会逐渐积累占用大量磁盘空间,并...