最近调整了原先的一个中间件的功能,把之前被产品去掉的规则表达式计算又重新添了回去.

这个中间件的基本功能是使用预定义的关键字和数值比对进行判断,从大量的数据中生成告警,主要是用于服务器监控.

这里的表达式计算仅使用了与逻辑相关的一些运算符.

原本是自己写了一个基于stack的表达式计算,后来被产品去掉了这个功能,说是用不到这种…然而这次的需求需要进行复杂的多规则计算,因此需要在现有的基础上重新添加回表达式计算功能.

为以后扩展起见,原本是使用java自带的js引擎进行计算,然而在实现了之后,自测性能时发现内存占用率过高.

后续找了一下开源的表达式计算引擎,话说网上能找到的计算引擎介绍全部都是一样的…后面试了几个,最终选择了JEP,效率和内存占用都比较符合要求.

介绍一下简单的使用

由于JEP在maven上有很多实现,试过了几个后选择了

<dependency><groupId>com.singularsys</groupId><artifactId>jep</artifactId><version>3.5</version>
</dependency>

引擎本身支持数学运算,但我只使用了其逻辑运算的一部分

String exp = "a&&(b||c)";
Jep jep=new Jep();
jep.parse(exp);
jep.addVariable("a",true);
jep.addVariable("b",true);
jep.addVariable("c",true);
jep.evaluate();

使用方式非常简单

  1. 构造Jep
  2. 解析表达式字符串
  3. 给表达式中的变量赋值
  4. 计算

需要注意的是给变量赋值的操作是可以重复进行的.不要重复解析表达式.

doc文档看这里

<http://www.singularsys.com/jep/doc/html/index.html>

表达式计算引擎-JEP相关推荐

  1. Fel表达式计算引擎学习 侵删

    Fel的问题 Fel的问题 Fel是轻量级的高效的表达式计算引擎 Fel在源自于企业项目,设计目标是为了满足不断变化的功能需求和性能需求. Fel是开放的,引擎执行中的多个模块都可以扩展或替换.Fel ...

  2. Fel表达式计算引擎学习

    载原文地址:Fel是轻量级的高效的表达式计算引擎 Fel的问题 Fel的问题 Fel是轻量级的高效的表达式计算引擎 Fel在源自于企业项目,设计目标是为了满足不断变化的功能需求和性能需求. Fel是开 ...

  3. Fel表达式计算引擎

    一.Fel表达式计算引擎介绍 Fel在源自于企业项目,设计目标是为了满足不断变化的功能需求和性能需求. Fel是开放的,引擎执行中的多个模块都可以扩展或替换.Fel的执行主要是通过函数实现,运算符(+ ...

  4. Fel轻量高效的表达式计算引擎

    Fel是轻量级的高效的表达式计算引擎 Fel在源自于企业项目,设计目标是为了满足不断变化的功能需求和性能需求. Fel是开放的,引擎执行中的多个模块都可以扩展或替换.Fel的执行主要是通过函数实现,运 ...

  5. 【Fel】Fel表达式计算引擎

    1.概述 Fel是轻量级的高效的表达式计算引擎. Fel在源自于企业项目,设计目标是为了满足不断变化的功能需求和性能需求. Fel是开放的,引擎执行中的多个模块都可以扩展或替换.Fel的执行主要是通过 ...

  6. 史上最为高效的表达式计算引擎Fel

    花满天的季节 盼望着,盼望着,三月悄然来了. 一切都像刚睡醒的样子,犹如婴儿缓缓睁眼. 粉粉嫩嫩的花儿开始羞涩起来, 沉闷程序猿小哥哥开始躁动起来 小E也带着小妹妹悠悠公园深处. 万物生长 桃花运来了 ...

  7. Fel是轻量级的高效的表达式计算引擎学习(一)

    Fel在源自于企业项目,设计目标是为了满足不断变化的功能需求和性能需求. Fel是开放的,引擎执行中的多个模块都可以扩展或替换.Fel的执行主要是通过函数实现,运算符(+.-等都是Fel函数),所有这 ...

  8. java fel_Fel是轻量级的高效的表达式计算引擎

    Fel有多快? 通常情况下,Fel-0.7每秒可以执行千万次表达式(不包含编译时间).速度是Jexl-2.0的20倍以上. 目前还没有发现开源的表达式引擎比Fel快. 为何要使用Fel? Fel语法和 ...

  9. 【Janino】Janino Java表达式计算引擎 案例

    文章目录 1.官方介绍 2.代码示例 1.官方介绍 当Apache Spark.Apache Flink.Presto为了加速数据处理速度,而使用"代码生成"技术时,都不约而同的选 ...

  10. expr4j 表达式计算

    1 expr4j 简介 Expression Calculation Engine for Java :java表达式计算引擎 2 expr4j 下载地址 https://www.objecthunt ...

最新文章

  1. iOS load方法和initialize方法的异同
  2. .NET 正则表达式’$’符号的使用
  3. USB学习5---android usb驱动源代码目录说明
  4. 时间服务器+注册表,注册表缺失导致Windows Server 2008 R2时钟服务W32time不能自启
  5. python分段线性插值_Python实现分段线性插值
  6. 我们大学的第一桶金!!(更新中。。。)
  7. 用windbg调试程序与windbg命令的使用
  8. gom引擎没有和账号服务器连接,GOM引擎和GEE引擎的传奇版本配置登录界面黑屏的原因和解决办法...
  9. mac制作u盘启动盘
  10. STM32F103_study55_The punctual atoms(STM32 PWM output experimental theoretical knowledge)
  11. 写的一个58获取房东手机号,爬虫,奈何号码都是加密,练手用
  12. python自动输入文字_Python自动输入【新手必学】
  13. 鼠标指针下总出现一个滚动条似的方框,怎么办?有图
  14. 使用 matplotlib绘制简单图形,保存图片的方法
  15. 访问者模式 Visitor
  16. c语言实现getline函数
  17. 普及下病毒性感冒和细菌性感冒的区别(如何看血常规)
  18. python+vue+elementui花卉种植技术网站
  19. 模式识别更接近计算机还是自动化,2020中科院自动化所考研初试经验
  20. ThingsBoard——v3.3.3源码编译

热门文章

  1. 如何批量生成UPC-E条码
  2. RN开发环境搭建-window
  3. GCC详解-Binutils工具之readelf
  4. linux ping mtu值,ping 包长度及 MTU
  5. 程序员必读的30本书籍
  6. 【随笔】hi3531D 音频
  7. 吉林大学超星MOOC高级语言程序设计 实验06 (2021级)
  8. 2022 CVPR 三维人体重建相关论文汇总(3D Human Reconstruction)
  9. VUE day_08(7.26)学子商城项目详细版
  10. 【CPLEX教程01】Cplex介绍,下载和安装Cplex