mirror of
https://github.com/labring/FastGPT.git
synced 2025-10-14 15:11:13 +00:00

* fix(api): 修复二级路由下的页面判断逻辑 在请求错误处理中,添加基础URL前缀以正确判断当前是否为外部链接页面。 * perf: use global var * remove invalid code * feat: response limit;perf: copy avatar image;perf: markdown parse (#5719) * feat: response limit * remove placeholder * perf: copy avatar image * perf: markdown parse * fix: child app cannot show cite * doc * fix: node template bugs (#5727) * add dataset search count track (#5721) * add dataset search count track * remove pro * change to track * remove unused * fix * perf: track code --------- Co-authored-by: archer <545436317@qq.com> * http response limit * deploy doc * fix: test * doc * remove invalid code * remove invalid code --------- Co-authored-by: 戴盛利 <1639499287@qq.com> Co-authored-by: heheer <heheer@sealos.io>
64 lines
1.9 KiB
TypeScript
64 lines
1.9 KiB
TypeScript
import './init';
|
|
import { getGlobalRedisConnection } from '../../common/redis';
|
|
import type { SystemCacheKeyEnum } from './type';
|
|
import { randomUUID } from 'node:crypto';
|
|
import { initCache } from './init';
|
|
import { isProduction } from '@fastgpt/global/common/system/constants';
|
|
|
|
const cachePrefix = `VERSION_KEY:`;
|
|
|
|
/**
|
|
*
|
|
* @param key SystemCacheKeyEnum
|
|
* @param id string (teamId, tmbId, etc), if '*' is used, all keys will be refreshed
|
|
*/
|
|
export const refreshVersionKey = async (key: `${SystemCacheKeyEnum}`, id?: string | '*') => {
|
|
const redis = getGlobalRedisConnection();
|
|
if (!global.systemCache) initCache();
|
|
|
|
const val = randomUUID();
|
|
const versionKey = id ? `${cachePrefix}${key}:${id}` : `${cachePrefix}${key}`;
|
|
if (id === '*') {
|
|
const pattern = `${cachePrefix}${key}:*`;
|
|
const keys = await redis.keys(pattern);
|
|
if (keys.length > 0) {
|
|
await redis.del(keys);
|
|
}
|
|
} else {
|
|
await redis.set(versionKey, val);
|
|
}
|
|
};
|
|
|
|
export const getVersionKey = async (key: `${SystemCacheKeyEnum}`, id?: string) => {
|
|
const redis = getGlobalRedisConnection();
|
|
if (!global.systemCache) initCache();
|
|
|
|
const versionKey = id ? `${cachePrefix}${key}:${id}` : `${cachePrefix}${key}`;
|
|
const val = await redis.get(versionKey);
|
|
if (val) return val;
|
|
|
|
// if there is no val set to the key, init a new val.
|
|
const initVal = randomUUID();
|
|
await redis.set(versionKey, initVal);
|
|
return initVal;
|
|
};
|
|
|
|
export const getCachedData = async <T extends SystemCacheKeyEnum>(key: T, id?: string) => {
|
|
if (!global.systemCache) initCache();
|
|
|
|
const versionKey = await getVersionKey(key, id);
|
|
const isDisableCache = process.env.DISABLE_CACHE === 'true';
|
|
|
|
const item = global.systemCache[key];
|
|
|
|
// 命中缓存
|
|
if ((isProduction || !item.devRefresh) && item.versionKey === versionKey && !isDisableCache) {
|
|
return item.data;
|
|
}
|
|
|
|
const refreshedData = await item.refreshFunc();
|
|
item.data = refreshedData;
|
|
item.versionKey = versionKey;
|
|
return item.data;
|
|
};
|