blog/internal/service/view_record_service.go

59 lines
1.5 KiB
Go

package service
import (
"Blog/internal/client"
"Blog/internal/consts"
"Blog/internal/repository"
"context"
"github.com/sirupsen/logrus"
)
var ViewRecordService *viewRecordService = newViewRecordService()
type viewRecordService struct {
}
func initViewRecordData() {
type viewRecord struct {
RelId string
Counts int
}
var slices []viewRecord
repository.ViewRecordRepository.Table(consts.TABLE_BLOG_VIEW_RECORD).Select("rel_id ,count(1) counts").Group("rel_id").Find(&slices)
logrus.Info("点击量初始化数据加载量:", len(slices))
for _, val := range slices {
client.RedisClient.HSet(context.Background(), consts.REDIS_BLOG_VIEW_RECORD, map[string]any{val.RelId: val.Counts})
}
}
func newViewRecordService() *viewRecordService {
go initViewRecordData()
return &viewRecordService{}
}
func (*viewRecordService) GetRecord(id string) int64 {
var count int64 = 0
ctx := context.Background()
// exists := client.RedisClient.Exists(ctx, consts.REDIS_BLOG_VIEW_RECORD).Val()
exists := client.RedisClient.HExists(ctx, consts.REDIS_BLOG_VIEW_RECORD, id).Val()
if exists {
i, err := client.RedisClient.HGet(ctx, consts.REDIS_BLOG_VIEW_RECORD, id).Int64()
if err != nil {
return i
}
}
err := repository.ViewRecordRepository.Table(consts.TABLE_BLOG_VIEW_RECORD).Where("rel_id = ?", id).Count(&count).Error
if err != nil {
return 0
}
err = client.RedisClient.HIncrBy(ctx, consts.REDIS_BLOG_VIEW_RECORD, id, count).Err()
if err != nil {
return 0
}
return count
}