Browse Source

解决Redis主页查询

majun
majun 5 months ago
parent
commit
48e1611422
  1. 7
      link_homework/internal/controller/homework/homework.go
  2. 47
      link_homework/internal/logic/homework/homework.go
  3. 2
      link_homework/internal/model/entity/activity_interactive_group.go
  4. 1
      link_homework/internal/service/homework.go

7
link_homework/internal/controller/homework/homework.go

@ -1,6 +1,7 @@
package homework package homework
import ( import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp" "github.com/gogf/gf/v2/net/ghttp"
"link_homework/api/v1/homework" "link_homework/api/v1/homework"
"link_homework/internal/model/dto" "link_homework/internal/model/dto"
@ -22,6 +23,7 @@ func (c cHomework) GetHomeworkList(r *ghttp.Request) {
}) })
} }
res, err := service.Homework().GetHomeworkList(r.Context(), req.PageNo, req.PageSize) res, err := service.Homework().GetHomeworkList(r.Context(), req.PageNo, req.PageSize)
total, err := service.Homework().GetHomeworkListTotal(r.Context())
if err != nil { if err != nil {
r.Response.WriteJsonExit(dto.Result{ r.Response.WriteJsonExit(dto.Result{
Code: 400, Code: 400,
@ -31,7 +33,10 @@ func (c cHomework) GetHomeworkList(r *ghttp.Request) {
r.Response.WriteJsonExit(dto.Result{ r.Response.WriteJsonExit(dto.Result{
Code: 200, Code: 200,
Message: "success", Message: "success",
Data: res,
Data: g.Map{
"list": res,
"total": total,
},
}) })
} }

47
link_homework/internal/logic/homework/homework.go

@ -2,6 +2,7 @@ package homework
import ( import (
"context" "context"
"encoding/json"
"fmt" "fmt"
"github.com/gogf/gf/v2/database/gdb" "github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/frame/g"
@ -26,8 +27,34 @@ func New() service.IHomework {
} }
func (s *sHomework) GetHomeworkList(ctx context.Context, pageNo int, pageSize int) (homeworkList []*entity.ActivityInteractiveGroup, err error) { func (s *sHomework) GetHomeworkList(ctx context.Context, pageNo int, pageSize int) (homeworkList []*entity.ActivityInteractiveGroup, err error) {
// 从Redis中获取数据
value, _ := g.Redis().Get(ctx, fmt.Sprintf("%d-%d homeworklist", pageNo, pageSize))
if value.String() != "" {
// 如果Redis中有数据,尝试解析为ActivityInteractiveGroup列表
err = json.Unmarshal(value.Bytes(), &homeworkList) //反序列化
homeworkList = UpdateHomework(ctx, homeworkList)
if err != nil {
return nil, err
}
return
}
// 如果Redis中没有数据,查询数据库
err = dao.ActivityInteractiveGroup.Ctx(ctx).With(entity.Live{}).Order("start_date desc, end_date desc").Page(pageNo, pageSize).Scan(&homeworkList) err = dao.ActivityInteractiveGroup.Ctx(ctx).With(entity.Live{}).Order("start_date desc, end_date desc").Page(pageNo, pageSize).Scan(&homeworkList)
err = g.DB("cms").Model("fx_article").Where("id", gdb.ListItemValuesUnique(homeworkList, "ArticleId")).ScanList(&homeworkList, "Article", "id:ArticleId") err = g.DB("cms").Model("fx_article").Where("id", gdb.ListItemValuesUnique(homeworkList, "ArticleId")).ScanList(&homeworkList, "Article", "id:ArticleId")
if err != nil {
return nil, err
}
// 将查询到的作业列表序列化并存储到Redis,更新频繁变更的数据
homeworkListJson, _ := json.Marshal(homeworkList)
_, _ = g.Redis().Set(ctx, fmt.Sprintf("%d-%d homeworklist", pageNo, pageSize), homeworkListJson)
homeworkList = UpdateHomework(ctx, homeworkList)
return
}
func UpdateHomework(ctx context.Context, homeworkList []*entity.ActivityInteractiveGroup) []*entity.ActivityInteractiveGroup {
for _, v := range homeworkList { for _, v := range homeworkList {
if v.StartDate.After(gtime.Now()) { if v.StartDate.After(gtime.Now()) {
v.Status = 0 v.Status = 0
@ -36,7 +63,15 @@ func (s *sHomework) GetHomeworkList(ctx context.Context, pageNo int, pageSize in
} else { } else {
v.Status = 1 v.Status = 1
} }
v.Count, err = dao.ActivityInteractiveRecord.Ctx(ctx).Where("group_id", v.Id).Count()
v.Count, _ = dao.ActivityInteractiveRecord.Ctx(ctx).Where("group_id", v.Id).Group("form_id").Limit(1).Count()
}
return homeworkList
}
func (s *sHomework) GetHomeworkListTotal(ctx context.Context) (total int, err error) {
total, err = dao.ActivityInteractiveGroup.Ctx(ctx).Count()
if err != nil {
return 0, err
} }
return return
} }
@ -84,6 +119,11 @@ func (s *sHomework) AddHomework(ctx context.Context, req *homework.AddHomeworkRe
GroupId: Id, GroupId: Id,
}).Insert() }).Insert()
} }
// 添加数据后,删除所有缓存
keys, err := g.Redis().Keys(ctx, "*-* homeworklist")
if len(keys) > 0 {
_, err = g.Redis().Del(ctx, keys...)
}
return return
} }
@ -154,6 +194,11 @@ func (s *sHomework) EditHomework(ctx context.Context, req *homework.EditHomework
}).WherePri(v.Id).Update() }).WherePri(v.Id).Update()
} }
} }
// 修改数据后,删除所有缓存
keys, _ := g.Redis().Keys(ctx, "*-* homeworklist")
if len(keys) > 0 {
_, _ = g.Redis().Del(ctx, keys...)
}
return return
} }
} }

2
link_homework/internal/model/entity/activity_interactive_group.go

@ -22,5 +22,5 @@ type ActivityInteractiveGroup struct {
EndDate *gtime.Time `json:"endDate" orm:"end_date" description:"作业结束时间"` // 作业结束时间 EndDate *gtime.Time `json:"endDate" orm:"end_date" description:"作业结束时间"` // 作业结束时间
Article *FxArticle `json:"article" description:"关联文章"` // 关联文章 Article *FxArticle `json:"article" description:"关联文章"` // 关联文章
Live *Live `json:"live" orm:"with:id=live_id" description:"关联直播"` // 关联直播 Live *Live `json:"live" orm:"with:id=live_id" description:"关联直播"` // 关联直播
Count int `json:"count" description:"作业提交次数"` // 作业结束时间
Count int `json:"count" description:"作业提交次数"`
} }

1
link_homework/internal/service/homework.go

@ -16,6 +16,7 @@ type (
GetHomeworkList(ctx context.Context, pageNo int, pageSize int) (homeworkList []*entity.ActivityInteractiveGroup, err error) GetHomeworkList(ctx context.Context, pageNo int, pageSize int) (homeworkList []*entity.ActivityInteractiveGroup, err error)
AddHomework(ctx context.Context, req *homework.AddHomeworkReq) (err error) AddHomework(ctx context.Context, req *homework.AddHomeworkReq) (err error)
EditHomework(ctx context.Context, req *homework.EditHomeworkReq) (err error) EditHomework(ctx context.Context, req *homework.EditHomeworkReq) (err error)
GetHomeworkListTotal(ctx context.Context) (total int, err error)
} }
) )

Loading…
Cancel
Save