蓝凌EKP产品:请求级缓存优化 - 使用RequestCacheUtils

本系列文章将分篇展开《EKP 性能开发最佳实践》中的重要技术点,帮助开发者快速了解和实施EKP性能优化方案。

  • 描述 RequestCacheUtils 的作用、场景

  • 代码示例

  • 结合实际场景分析效果

在日常开发中,我们经常会遇到同一个请求中重复计算同一结果的场景。尤其在流程发起、页面加载等操作中,如果某段代码在一次请求中被多次调用,并且返回结果一致,那么就存在显著的优化空间。EKP 提供的 RequestCacheUtils 工具类,正是为解决这一问题而生。

一、核心思想

通过将计算结果缓存到 HttpServletRequest 的 attribute 中,确保在同一次请求内,仅执行一次耗时逻辑,其它调用直接返回缓存结果。

                                

核心思想

二、使用方式

String cacheKey = "__getSysListshowCategory:" + model + "#" + page;
SysListshowCategory result = RequestCacheUtils.getValueFromRequest(cacheKey, () -> {
    HQLInfo hqlInfo = new HQLInfo();
    hqlInfo.setWhereBlock(" sysListshowCategory.fdModel = :fdModel");
    hqlInfo.setParameter("fdModel", model);
    return (SysListshowCategory) findFirstOne(hqlInfo);
});
  • cacheKey:缓存键值,建议业务自定义并保证唯一性。

  • 第二个参数是 Supplier 接口的 Lambda 表达式,表示真正的计算逻辑。

  • 如果该 key 第一次被访问,则执行逻辑;否则直接从 request attribute 中取结果。

三、典型使用场景

  1. 字典数据查询:某些下拉框的数据在一次请求中被多次使用,比如流程表单加载时。

  2. 权限判断逻辑:如某用户是否有某操作权限,在多个组件中都需要使用。

  3. 模型查询封装:如 getCategory(model, page) 这种需要访问数据库的封装方法。

  4. 流程定义获取处理人:如 fetchAllDefHandlers() 获取流程节点定义的处理人,在一个请求内多次获取。

四、性能效果分析

以一次表单加载为例,使用 RequestCacheUtils 之后:

  • 原来相同数据库查询可能被执行3~5次,如今仅执行1次。

  • 若涉及Redis缓存、权限判断等接口逻辑,还可进一步降低外部依赖请求数量。

  • 缓存粒度精确到 request 生命周期,不影响线程安全。

五、注意事项

  • 不适合缓存变化频繁的数据(如在线状态、计数器)。

  • 缓存 key 尽量明确唯一,避免数据交叉污染。

  • 仅限于单个请求生命周期,不可替代全局缓存方案(如Redis)。

通过合理使用 RequestCacheUtils,不仅提升了代码运行效率,也让整体系统具备更好的吞吐能力,是EKP开发中非常实用的一项优化手段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值