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
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
"link_homework/api/v1/homework"
"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)
total, err := service.Homework().GetHomeworkListTotal(r.Context())
if err != nil {
r.Response.WriteJsonExit(dto.Result{
Code: 400,
@ -31,7 +33,10 @@ func (c cHomework) GetHomeworkList(r *ghttp.Request) {
r.Response.WriteJsonExit(dto.Result{
Code: 200,
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 (
"context"
"encoding/json"
"fmt"
"github.com/gogf/gf/v2/database/gdb"
"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) {
// 从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 = 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 {
if v.StartDate.After(gtime.Now()) {
v.Status = 0
@ -36,7 +63,15 @@ func (s *sHomework) GetHomeworkList(ctx context.Context, pageNo int, pageSize in
} else {
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
}
@ -84,6 +119,11 @@ func (s *sHomework) AddHomework(ctx context.Context, req *homework.AddHomeworkRe
GroupId: Id,
}).Insert()
}
// 添加数据后,删除所有缓存
keys, err := g.Redis().Keys(ctx, "*-* homeworklist")
if len(keys) > 0 {
_, err = g.Redis().Del(ctx, keys...)
}
return
}
@ -154,6 +194,11 @@ func (s *sHomework) EditHomework(ctx context.Context, req *homework.EditHomework
}).WherePri(v.Id).Update()
}
}
// 修改数据后,删除所有缓存
keys, _ := g.Redis().Keys(ctx, "*-* homeworklist")
if len(keys) > 0 {
_, _ = g.Redis().Del(ctx, keys...)
}
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:"作业结束时间"` // 作业结束时间
Article *FxArticle `json:"article" 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)
AddHomework(ctx context.Context, req *homework.AddHomeworkReq) (err error)
EditHomework(ctx context.Context, req *homework.EditHomeworkReq) (err error)
GetHomeworkListTotal(ctx context.Context) (total int, err error)
}
)

Loading…
Cancel
Save