You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在ModX中跨Snippet数组获取的缓存限制问题求助

解决方案

核心思路

通过给生成数组的Snippet(以下称Snippet B)配置7天有效期的全局缓存,确保它每周仅实际执行一次;非缓存的Snippet(以下称Snippet A)每次执行时直接调用Snippet B,复用其缓存的数组结果,同时满足数组不被A缓存的要求。

具体实现步骤

  • 配置Snippet B的缓存规则:设置缓存有效期为7天,且缓存作用域为全局(应用级),这样所有请求都能共享同一缓存结果,避免重复执行数组生成逻辑。
  • 在Snippet A中调用Snippet B:Snippet A保持非缓存状态,每次执行时直接调用Snippet B,此时会自动复用B的缓存结果,无需额外缓存数组。

伪代码示例

Snippet B(缓存,每周执行一次)

// 缓存配置:有效期7天,全局缓存
const generateWeeklyArray = cached({
  expireAfter: 7 * 24 * 60 * 60 * 1000,
  scope: "global"
}, () => {
  // 耗时的数组生成逻辑,每周仅执行一次
  return [/* 生成的数组内容 */];
});

Snippet A(非缓存,每次执行调用B)

// 非缓存标记,确保每次请求都执行
const processData = uncached(() => {
  // 直接调用缓存的Snippet B,获取每周更新的数组
  const weeklyArray = generateWeeklyArray();
  // 后续业务处理逻辑
  handleArrayData(weeklyArray);
});

关键注意事项

  • 必须确保Snippet B的缓存是全局作用域,不能是请求级或用户级,否则不同请求会触发重复执行。
  • 缓存过期时间需精准设置为7天,避免提前刷新或延迟更新数组。
  • 若数组生成逻辑依赖外部服务,需添加异常处理机制,防止缓存失效时Snippet A无法获取有效数据。

内容的提问来源于stack exchange,提问作者benni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 07:09:11