mirror of
https://github.com/labring/FastGPT.git
synced 2026-02-27 01:02:22 +08:00
* perf: auto focus * perF: getInitData api cache * perf: tool description field * signoz store level * perF: chat logs index
1.2 KiB
1.2 KiB
服务端资源版本 ID 缓存方案
背景
FastGPT 会采用多节点部署方式,有部分数据缓存会存储在内存里。当需要使用这部分数据时(不管是通过 API 获取,还是后端服务自己获取),都是直接拉取内存数据,这可能会导致数据不一致问题,尤其是用户通过 API 更新数据后再获取,就容易获取未修改数据的节点。
解决方案
- 给每一个缓存数据加上一个版本 ID。
- 获取该数据时候,不直接引用该数据,而是通过一个 function 获取,该 function 可选的传入一个 versionId。
- 获取数据时,先检查该 versionId 与 redis 中,资源版本id 与传入的 versionId 是否一致。
- 如果数据一致,则直接返回数据。
- 如果数据不一致,则重新获取数据,并返回最新的 versionId。调用方则需要更新其缓存的 versionId。
代码方案
- 获取和更新缓存的代码,直接复用 FastGPT/packages/service/common/redis/cache.ts
- 每个资源,自己维护一个 cacheKey
- 每次更新资源/触发拉取最新资源时,都需要更新 cacheKey 的值。
涉及的业务
- FastGPT/projects/app/src/pages/api/common/system/getInitData.ts,获取初始数据