目录

一、什么是 QLExpress?

二、推荐系统中的规则脚本应用

1 场景描述

2 推荐规则脚本(QLExpress)

3 系统实现

4 执行结果

5 推荐系统应用建议

三、风控系统中的规则判定

1 场景描述

2 风控规则脚本(QLExpress)

3 系统实现

4 执行结果

5 风控系统应用建议

四、设计建议


在大型系统中,规则引擎的存在使业务逻辑从代码中解耦出来,使得系统具备更高的灵活性与可维护性。阿里巴巴开源的 QLExpress 正是一款轻量级、高性能、可扩展的 Java 表达式引擎,广泛应用于推荐、风控、营销等场景。

本文将围绕两个典型业务场景:推荐系统风控系统,详细演示如何使用 QLExpress 构建脚本型规则体系,实现“可配置、可执行、可热更新”的规则逻辑管理。

一、什么是 QLExpress?

QLExpress 是阿里巴巴开源的规则引擎工具,核心目标是通过类 Java 的脚本语法实现业务规则的动态编写与执行,具备如下特性:

特性说明
轻量高性能不依赖字节码增强或复杂 AST,内存占用小、性能优越
表达式能力强支持 if, for, while, return 等控制结构
支持变量注入可注入上下文对象、Java Bean、自定义函数
可运行时加载可从数据库或配置中心动态加载脚本规则
安全可控可配置沙箱环境,限制访问对象与方法

二、推荐系统中的规则脚本应用

1 场景描述

推荐系统通常需要基于用户画像、行为等动态特征生成推荐策略。以如下规则为例:

  • 新用户 + 喜好“运动” → 推荐“运动入门课程”

  • 活跃度高 → 推荐“高阶训练计划”

  • 年龄小于 18 → 推荐“青少年专属内容”

这些规则变化频繁、迭代快速,采用脚本型规则管理更合适。

2 推荐规则脚本(QLExpress)

if (isNewUser && tags.contains("运动")) {return "推荐:运动入门课程";
} else if (activityScore > 80) {return "推荐:高阶训练计划";
} else if (age < 18) {return "推荐:青少年专属内容";
} else {return "推荐:通用内容";
}

3 系统实现

import com.ql.util.express.DefaultContext;
import com.ql.util.express.ExpressRunner;
import java.util.Arrays;
import java.util.List;
​
public class RecommendDemo {public static void main(String[] args) throws Exception {// 模拟用户画像UserProfile user = new UserProfile(17, Arrays.asList("运动", "学习"), 60, true);
​// 上下文注入DefaultContext<String, Object> context = new DefaultContext<>();context.put("age", user.age);context.put("tags", user.tags);context.put("activityScore", user.activityScore);context.put("isNewUser", user.isNewUser);
​// 推荐规则脚本String script = ""+ "if (isNewUser && tags.contains(\"运动\")) {\n"+ "  return \"推荐:运动入门课程\";\n"+ "} else if (activityScore > 80) {\n"+ "  return \"推荐:高阶训练计划\";\n"+ "} else if (age < 18) {\n"+ "  return \"推荐:青少年专属内容\";\n"+ "} else {\n"+ "  return \"推荐:通用内容\";\n"+ "}";
​Object result = new ExpressRunner().execute(script, context, null, true, false);System.out.println("推荐结果:" + result);}
​static class UserProfile {int age;List<String> tags;int activityScore;boolean isNewUser;UserProfile(int age, List<String> tags, int activityScore, boolean isNewUser) {this.age = age;this.tags = tags;this.activityScore = activityScore;this.isNewUser = isNewUser;}}
}

4 执行结果

推荐结果:推荐:运动入门课程

5 推荐系统应用建议

  • 后台配置推荐规则脚本,实时热更新;

  • 按用户群体拆分规则(新用户/老用户);

  • 日志记录命中规则,便于推荐效果分析。

三、风控系统中的规则判定

1 场景描述

风控系统中,我们需要实时评估用户风险。例如:

  • 模拟器登录 → 拒绝

  • IP 与登录 IP 不一致 → 复审

  • 短时间内频繁申请 → 复审

  • 行为评分过低 → 拒绝

2 风控规则脚本(QLExpress)

if (deviceType == "模拟器") {return "REJECT:模拟器登录";
} else if (ip != loginIp) {return "REVIEW:IP地址异常";
} else if (applyCount > 5) {return "REVIEW:申请过于频繁";
} else if (behaviorScore < 60) {return "REJECT:行为评分过低";
} else {return "PASS";
}

3 系统实现

import com.ql.util.express.DefaultContext;
import com.ql.util.express.ExpressRunner;
​
public class RiskControlDemo {public static void main(String[] args) throws Exception {RiskContext user = new RiskContext("模拟器", "192.168.1.10", "192.168.1.10", 2, 85);
​DefaultContext<String, Object> context = new DefaultContext<>();context.put("deviceType", user.deviceType);context.put("ip", user.ip);context.put("loginIp", user.loginIp);context.put("applyCount", user.applyCount);context.put("behaviorScore", user.behaviorScore);
​String script = ""+ "if (deviceType == \"模拟器\") {\n"+ "    return \"REJECT:模拟器登录\";\n"+ "} else if (ip != loginIp) {\n"+ "    return \"REVIEW:IP地址异常\";\n"+ "} else if (applyCount > 5) {\n"+ "    return \"REVIEW:申请过于频繁\";\n"+ "} else if (behaviorScore < 60) {\n"+ "    return \"REJECT:行为评分过低\";\n"+ "} else {\n"+ "    return \"PASS\";\n"+ "}";
​Object result = new ExpressRunner().execute(script, context, null, true, false);System.out.println("风控结果:" + result);}
​static class RiskContext {String deviceType, ip, loginIp;int applyCount, behaviorScore;RiskContext(String deviceType, String ip, String loginIp, int applyCount, int behaviorScore) {this.deviceType = deviceType;this.ip = ip;this.loginIp = loginIp;this.applyCount = applyCount;this.behaviorScore = behaviorScore;}}
}

4 执行结果

风控结果:REJECT:模拟器登录

5 风控系统应用建议

  • 分维度组织规则(设备/IP/行为等);

  • 返回结果分类(REJECT/REVIEW/PASS)做后续分流;

  • 记录执行日志与规则命中路径;

  • 配合数据库存储规则并热加载。

四、设计建议

QLExpress 提供了一种 灵活、轻量、高性能 的方式来处理复杂的业务规则:

  • 推荐系统中:策略运营人员可通过脚本灵活配置推荐逻辑;

  • 风控系统中:安全/风控策略团队可动态调整风险判断规则;

  • 实现代码与规则解耦,提升系统响应与变更效率;

  • 可通过规则脚本 + 数据注入快速构建业务中台能力。

如果你正在构建一个需要规则动态变更、逻辑可配置的系统,那么 QLExpress 会是非常值得引入的工具。


参考资料:https://github.com/alibaba/QLExpress

github:https://github.com/alibaba/QLExpress

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/90230.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/90230.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/90230.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【硬件-笔试面试题】硬件/电子工程师,笔试面试题-13,(知识点:DC-DC电源,相位裕度,增益裕度)

目录 1、题目 2、解答 相位裕度 增益裕度 3、相关知识点 一、波特图 二、相位裕度 三、增益裕度 四、在 DC - DC 电源中的应用 【硬件-笔试面试题】硬件/电子工程师&#xff0c;笔试面试题汇总版&#xff0c;持续更新学习&#xff0c;加油&#xff01;&#xff01;&a…

学生信息管理系统 - HTML实现增删改查

学生信息管理系统 - HTML实现增删改查 效果图 代码 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><titl…

Agile简介

Agile&#xff08;敏捷&#xff09;是一种软件开发方法论&#xff0c;核心是通过快速迭代、灵活响应变化&#xff0c;解决传统软件开发中周期长、需求变更困难等问题&#xff0c;最终高效交付符合用户实际需求的产品。 一、Agile 的起源&#xff1a;为什么需要敏捷&#xff1f;…

关于 URL 中 “+“ 号变成空格的问题

当你在 URL 中传递参数时&#xff0c;加号 () 会被自动转换为空格&#xff0c;这是 URL 编码的标准行为。问题原因在 URL 中&#xff1a;空格会被编码为 号当 URL 被解码时&#xff0c; 号又会被转换回空格这会导致原始数据中的 号丢失解决方案你需要对参数值进行正确的 URL …

综合实验(2)

文章目录 目录 文章目录 前言 OSPF运行在GRE隧道概述 典型应用场景 OSPF over GRE 配置 总结 前言 OSPF运行在GRE隧道概述 GRE&#xff08;Generic Routing Encapsulation&#xff09;隧道是一种通过封装原始数据包在IP网络中创建虚拟点对点连接的隧道技术。OSPF&#xff08;…

【应急响应工具教程】司稽(Whoamifuck):纯Shell打造的Linux应急响应利器

1、工具简介司稽&#xff08;Whoamifuck或Chief-Inspector,简称"who"&#xff09;&#xff0c;永恒之锋发布的第一款开源工具&#xff0c;这是一款由shell编写的Linux应急响应脚本&#xff0c;能对基本的检查项进行输出和分析&#xff0c;并支持一些扩展的特色功能。…

新手操作steam搬砖项目,应该如何快速起步

大家好哦&#xff0c;我是阿阳&#xff0c;今天继续给大家分享一些steam搬砖的知识。在我们操作过程中&#xff0c;问题问得最多的就是&#xff0c;新手应该怎么做&#xff1f;首先&#xff0c;那我们得先来了解-下,什么是steam搬砖,它的项目原理是什么&#xff0c;其次针对于这…

rt-thread加一个库

背景 官方软件包里没有的 可以以库或组件形式加入 本次仅为了验证&#xff0c;加到库 过程 下载源码 假设为 lib_demo 自己的板子目录为bsp/stm32 代码目录结构 bsp/stm32librarieslib_demo //新建文件夹src //把lib_demo里源码文件放进来inc //把lib_demo里头文件放进来SConsc…

c++深拷贝和浅拷贝

一、浅拷贝本质&#xff1a;简单地复制对象的成员值。如果成员里有指针&#xff0c;新对象和原对象的指针会指向同一块内存。比如你有对象 A&#xff0c;里面指针 p 指向堆内存 0x123&#xff1b;用 A 拷贝出对象 B&#xff0c;B 的指针 p 也指向 0x123。问题&#xff1a;若其中…

NineData新增SQL Server到MySQL复制链路,高效助力异构数据库迁移

在实际的数据库迁移工作中&#xff0c;异构库之间的迁移常常被视为一项“高风险、高工作量、高复杂度”的挑战任务。这不仅是一次数据库切换&#xff0c;更是对系统稳定性、数据一致性、业务连续性和技术团队耐力的全方位考验。为解决企业在异构数据库迁移中的痛点&#xff0c;…

字符串和对象的深拷贝和浅拷贝

字符串和对象的深拷贝和浅拷贝【一】基本介绍【1】浅拷贝【2】深拷贝【二】字符串的拷贝【1】字符串的 “浅拷贝”【2】字符串的 “深拷贝”【三】对象的拷贝【1】浅拷贝&#xff08;Shallow Copy&#xff09;【2】深拷贝&#xff08;Deep Copy&#xff09;【四】字符串和对象拷…

4.5 优化器中常见的梯度下降算法

梯度下降算法&#xff08;Gradient Descent&#xff09;的数学公式可以通过以下步骤严格表达&#xff1a;1. 基本梯度下降&#xff08;Batch Gradient Descent&#xff09; 目标&#xff1a;最小化损失函数L(θ)\mathcal{L}(\theta)L(θ)&#xff0c;其中 θ\thetaθ是模型参数…

AM1.5G AAA稳态太阳光模拟器特点

光谱匹配度AM1.5G AAA稳态太阳光模拟器的光谱分布严格匹配国际标准IEC 60904-9中的AM1.5G光谱&#xff08;波长范围300-4000nm&#xff09;&#xff0c;确保与自然太阳光的偏差在25%以内&#xff08;AAA级标准&#xff09;。光谱匹配度通过精密滤光片和氙灯或LED组合光源实现&a…

OSPF开放式最短路径优先

1OSPF简介&#xff08;1&#xff09;OSPF英文全称Open Shortest Path First (开放式最短路径优先)&#xff08;2&#xff09;OSPF是IETF 开发的一种链路状态路由协议&#xff0c;使用基于带宽的度量值。&#xff08;3&#xff09;OSPF采用SPF算法计算路由&#xff0c;从算法上保…

Lua(模块与包)

Lua 模块的基本概念Lua 中的模块是一个由函数、变量组成的代码库&#xff0c;通常保存在独立的 .lua 文件中。模块通过 return 语句导出其内容&#xff0c;供其他脚本调用。模块化设计可以提高代码复用性&#xff0c;便于管理。创建模块模块通常以 .lua 文件形式存在&#xff0…

1. boost::asio之socket的创建和连接

网络编程基本流程 网络编程的基本流程对于服务端是这样的 服务端 1&#xff09;socket——创建socket对象。 2&#xff09;bind——绑定本机ipport。 3&#xff09;listen——监听来电&#xff0c;若在监听到来电&#xff0c;则建立起连接。 4&#xff09;accept——再创建一个…

WPF 控制动画开关

记录一种实现方式&#xff1a;第一步&#xff1a;首先定义一个静态类&#xff0c;提供依赖属性&#xff0c;进而方便在xaml中实现绑定&#xff1a;public static class AnimationBehavior{// 定义附加属性public static readonly DependencyProperty IsAnimatingProperty Depen…

元素竖向的百分比设定是相对于父容器的高度吗?

元素竖向的百分比设定是相对于父容器的高度吗&#xff1f; 核心问题 在CSS中&#xff0c;当设置元素的竖向属性&#xff08;如height、padding-top等&#xff09;为百分比值时&#xff0c;其计算基准是父容器的高度还是宽度&#xff1f; 权威结论height属性 百分比值基于父容器…

web3.0怎么入局

Web3.0(第三代互联网)融合了区块链、去中心化应用(DApps)、NFT、DAO等新兴技术,给个人和机构提供了许多全新的赚钱机会。入局 Web3.0 赚钱主要有以下几种途径,根据你的技术背景、资金能力和时间投入可以选择适合自己的方式。 目录 一、普通用户赚钱方式(门槛低) 1. …

linux入门 相关linux系统操作命令(二)--文件管理系统 ubuntu22.04

以下有免费的4090云主机提供ubuntu22.04系统的其他入门实践操作 地址&#xff1a;星宇科技 | GPU服务器 高性能云主机 云服务器-登录 相关兑换码星宇社区---4090算力卡免费体验、共享开发社区-CSDN博客 兑换码要是过期了&#xff0c;可以私信我获取最新兑换码&#xff01;&a…