# 缓存 SDK 使用 `We\Contract\StoreCacheInterface` 缓存 access token 和 component access token。接口语义包括 TTL、删除和刷新锁: ```php run($key, $ttl, $callback); }, ); $client = new Client( cache: $store, cacheKeyPrefix: 'production-tenant-a', ); ``` 如果没有注入 `locker`,需要刷新 token 时 `PsrSimpleCacheStore::lock()` 会抛出 `SdkException`,而不是静默绕过并发保护。 ## 缓存键 完整键由部署前缀、平台通道和逻辑键三段组成。每段使用 `rawurlencode()`,再用点号连接: ```text production-tenant-a.wechat.platform.wechat%3Aapp%3Awx_appid%3Aplatform%3Aaccess_token ``` 该格式不会包含 PSR-16 保留字符 `{ } ( ) / \\ @ :`。部署前缀和通道仍保持稳定隔离;逻辑键的内部层次被编码在第三段内。 2.0 发布前的旧冒号格式不属于稳定接口。升级时不需要迁移旧 token 缓存,允许 SDK 按新键重新获取。 ## 多租户 - 使用根 `Client::$cacheKeyPrefix` 隔离部署或大租户。 - 使用微信配置中的 `storageScope` 隔离同一 appid 下的业务账号或子租户。 - 不要在请求间随机改变这两个值,否则会失去缓存命中并放大平台 token 请求。