Version: 0.2.4.dev.260211

perf: 🚀 为获取任务队列中的任务与今日日程一览接口新增缓存

- 为获取任务队列中的任务接口增加缓存机制 
- 为今日日程一览接口增加缓存机制 📅
- 提升接口访问性能与响应速度 
This commit is contained in:
LoveLosita
2026-02-11 17:31:12 +08:00
parent cf9a3c79e4
commit a2da9a2aa4
5 changed files with 120 additions and 9 deletions

View File

@@ -2,22 +2,27 @@ package service
import (
"context"
"errors"
"log"
"github.com/LoveLosita/smartflow/backend/conv"
"github.com/LoveLosita/smartflow/backend/dao"
"github.com/LoveLosita/smartflow/backend/model"
"github.com/LoveLosita/smartflow/backend/respond"
"github.com/go-redis/redis/v8"
)
type TaskService struct {
// 伸出手:准备接住 DAO
dao *dao.TaskDAO
dao *dao.TaskDAO
cache *dao.CacheDAO
}
// NewTaskService 创建 TaskService 实例
func NewTaskService(dao *dao.TaskDAO) *TaskService {
func NewTaskService(dao *dao.TaskDAO, cache *dao.CacheDAO) *TaskService {
return &TaskService{
dao: dao,
dao: dao,
cache: cache,
}
}
@@ -35,16 +40,38 @@ func (ts *TaskService) AddTask(ctx context.Context, req *model.UserAddTaskReques
}
//4. 调用 conv 层进行响应转换
response := conv.ModelToUserAddTaskResponse(createdTask)
//5. 添加成功后,清除相关缓存(如果有的话),以保证数据一致性
err = ts.cache.DeleteUserTasksFromCache(ctx, userID)
if err != nil {
// 缓存删除失败,记录日志但不影响正常返回数据
log.Printf("Failed to delete user tasks cache for userID %d: %v", userID, err)
}
return response, nil
}
func (ts *TaskService) GetUserTasks(ctx context.Context, userID int) ([]model.GetUserTaskResp, error) {
//1. 调用 courseDAO 层获取数据
//1. 先尝试从缓存获取数据
cachedResp, err := ts.cache.GetUserTasksFromCache(ctx, userID)
if err == nil {
// 缓存命中,直接返回
return cachedResp, nil
}
// 如果是 redis.Nil 错误,说明缓存未命中,我们继续查库
if !errors.Is(err, redis.Nil) {
return nil, err // 其他错误,返回错误
}
//2. 调用 courseDAO 层获取数据
tasks, err := ts.dao.GetTasksByUserID(userID)
if err != nil {
return nil, err
}
//2. 调用 conv 层进行响应转换
//3. 调用 conv 层进行响应转换
response := conv.ModelToGetUserTasksResp(tasks)
//4. 将结果存入缓存设置合理的过期时间24h
err = ts.cache.SetUserTasksToCache(ctx, userID, response)
if err != nil {
// 缓存写入失败,记录日志但不影响正常返回数据
log.Printf("Failed to cache user tasks for userID %d: %v", userID, err)
}
return response, nil
}