用途:在 Salesforce B2C Commerce 中实现自定义缓存,把计算昂贵、获取耗时或频繁访问的数据存入缓存,以提升代码性能。缓存定义在购物篮(cartridge)内的 JSON 文件中,通过 Script API 访问。
主要能力:支持缓存昂贵计算(如判断变体商品是否促销)、外部系统响应(如门店库存或价格)、配置数据(JSON 文件或外部来源)以及频繁访问的数据(商品属性、分类数据、站点偏好)。
使用方式:在 package.json 中添加 caches 字段指向 caches.json,例如 {"name":"my_cartridge","caches":"./caches.json"};在 caches.json 中定义缓存,id 必填且需在代码版本内所有购物篮中唯一,expireAfterSeconds 可选。通过 dw.system.CacheMgr 获取缓存,dw.system.Cache 存取条目。推荐使用 get(key, loader) 模式在未命中时自动加载;键中应包含站点、目录、区域等作用域标识。方法包括 get(key)、get(key, loader)、put(key, value)、invalidate(key)。
限制:每个应用服务器所有自定义缓存总内存约 20 MB;每个代码版本最多 100 个缓存;单条目最大 128 KB;仅支持原始类型、数组、普通对象和 null(不支持 undefined);缓存不跨服务器同步,按应用服务器独立。缓存会在代码版本文件变更、激活新版本、数据或代码复制完成时自动清除;手动失效仅影响当前应用服务器。
最佳实践:使用 get(key, loader) 自动填充;键中包含作用域;为时效性数据设置合适的过期时间;优雅处理未命中;使用描述性缓存 ID。避免在键中放入个人用户数据、存储 Script API 对象、依赖条目持久存在、期望跨服务器同步或存储 undefined。
故障排查:缓存未找到异常通常因 ID 未在任何 caches.json 中定义;重复 ID 错误因多个购物篮使用相同 ID;条目未存储可能因超过 128 KB 或包含 Script API 对象;意外未命中可能因不同应用服务器或缓存被清除。可查看自定义错误日志和警告日志。