原系统存在以下性能瓶颈:
typescript展开代码// packages/server/src/scheme/tag.schema.ts
@Schema()
export class Tag extends Document {
@Prop({ index: true, unique: true })
name: string;
@Prop({ default: 0, index: true })
articleCount: number;
@Prop({ default: [], index: true })
articleIds: number[];
@Prop({ index: true, default: () => new Date() })
createdAt: Date;
@Prop({ index: true, default: () => new Date() })
updatedAt: Date;
}
{ name: 1 }
{ name: 1, articleCount: -1 }
{ articleCount: -1, updatedAt: -1 }
syncTagsFromArticles()
:同步标签数据getTagsPaginated()
:分页获取标签getHotTags()
:获取热门标签searchTags()
:搜索标签管理端API(需要登录):
GET /api/admin/tag/paginated
- 分页获取标签GET /api/admin/tag/hot
- 获取热门标签GET /api/admin/tag/search
- 搜索标签POST /api/admin/tag/sync
- 同步标签数据公共API:
GET /api/public/tag/hot
- 获取热门标签GET /api/public/tag/paginated
- 分页获取标签(公共)javascript展开代码// packages/admin/src/pages/DataManage/tabs/Tag.jsx
- 支持分页加载(默认50条/页)
- 支持搜索功能
- 支持按文章数量和名称排序
- 显示文章数量统计
- 一键同步标签数据功能
typescript展开代码// packages/website/pages/tag.tsx
- 支持分页加载标签
- 支持搜索和排序
- 显示标签文章数量
- 懒加载更多标签
- 响应式设计
typescript展开代码// packages/server/src/provider/cache/cache.provider.ts
- 支持TTL(过期时间)
- 支持模式匹配删除
- 自动清理过期缓存
- 缓存统计功能
tag:
MongoDB会自动创建所需索引,无需手动操作。
基于内存缓存,无需配置Redis等外部服务。
bash展开代码# 重新同步标签数据
POST /api/admin/tag/sync
cacheProvider.getStats()
cacheProvider.cleanup()
javascript展开代码// 查看缓存统计
const stats = cacheProvider.getStats();
console.log('缓存统计:', stats);
// 手动清理过期缓存
cacheProvider.cleanup();
// 清空所有缓存
cacheProvider.clear();
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!