New version trial

This commit is contained in:
mubai
2026-04-05 20:00:40 +08:00
parent 557ee42ebb
commit 06dc25d2f2
18 changed files with 537 additions and 211 deletions

View File

@@ -177,6 +177,7 @@ func DelSlaveMovieInfos(id string) {
//}
}
// AddMovieDetailIndex 添加详情表索引
func AddMovieDetailIndex() {
var m MovieDetail
tableName := m.TableName()
@@ -184,14 +185,16 @@ func AddMovieDetailIndex() {
db.Mdb.Exec(fmt.Sprintf("CREATE UNIQUE INDEX idx_mid ON %s (mid)", tableName))
}
// AddSlaveMovieInfoIndex 添加附属站点信息表索引
func AddSlaveMovieInfoIndex() {
var s SlaveMovieInfo
tableName := s.TableName()
// 如果不存在索引则创建对应索引
if !db.Mdb.Migrator().HasIndex(&s, "idx_mid") {
// 添加索引
db.Mdb.Exec(fmt.Sprintf("CREATE INDEX idx_mid ON %s (mid)", tableName))
db.Mdb.Exec(fmt.Sprintf("CREATE INDEX idx_dbId ON %s (db_id)", tableName))
db.Mdb.Exec(fmt.Sprintf("CREATE INDEX idx_sid ON %s (sid DESC)", tableName))
db.Mdb.Exec(fmt.Sprintf("CREATE INDEX idx_mid ON %s (mid DESC)", tableName))
db.Mdb.Exec(fmt.Sprintf("CREATE INDEX idx_dbId ON %s (db_id DESC", tableName))
}
}
@@ -312,7 +315,7 @@ func BatchUpdateDetails(ml []MovieDetail) (err error) {
// ExistMovieDetailByMid 通过mid判断是否存在对应信息
func ExistMovieDetailByMid(mid int64) bool {
var count int64
db.Mdb.Model(&SearchInfo{}).Where("mid", mid).Count(&count)
db.Mdb.Model(&MovieDetail{}).Where("mid", mid).Count(&count)
return count > 0
}
@@ -440,12 +443,32 @@ func SlaveDetailCache(id string, ml []MovieDetail) error {
// 只执行保存操作, 不考虑更新情况
s := SlaveMovieInfo{Sid: id, Mid: GenerateHashKey(m.Name), DbId: m.DbId, PlayList: m.PlayList}
r, _ := json.Marshal(s)
data[s.Mid] = string(r)
// redis中的存储key优先db_id
if s.DbId > 0 {
data[fmt.Sprintf("%d", s.DbId)] = string(r)
} else {
data[s.Mid] = string(r)
}
}
// 使用 Sid:Mid为key, 用以区分不同站点数据
return db.Rdb.HSet(db.Cxt, fmt.Sprintf(config.MultipleSiteDetailKey, id), data).Err()
}
// GetSlaveDetailInCache 从redis缓存中获取播放信息
func GetSlaveDetailInCache(sid, mid string) SlaveMovieInfo {
// 初始化返回值
var s SlaveMovieInfo
v, err := db.Rdb.HGet(db.Cxt, fmt.Sprintf(config.MultipleSiteDetailKey, sid), mid).Result()
if err != nil {
// 如果没有获取到对应值, 则直接continue
//log.Println("Get MultipleSiteDetail Failed: ", err)
return s
}
// 如果获取到数据则直接退出本次循环
_ = json.Unmarshal([]byte(v), &s)
return s
}
// SyncMovieDetail 同步redis中的影片数据到mysql中
func SyncMovieDetail(sid string, grade SourceGrade, mode int) {
// 初始化游标
@@ -554,8 +577,7 @@ func GetDetailByMid(mid int64) MovieDetail {
if err != nil {
// 如果没有获取到对应值, 则去mysql中进行查找
if errors.Is(err, redis.Nil) {
if err := db.Mdb.Model(&MovieDetail{}).Select("id, mid, cid, pid, name, sub_title, c_name, state, picture, actor, director,"+
" content, remarks, area, year").Where("mid = ?", mid).Find(&m).Error; err != nil {
if err := db.Mdb.Where("mid = ?", mid).Find(&m).Error; err != nil {
log.Println("Find BasicInfo Failed: ", err)
return m
}
@@ -631,7 +653,7 @@ func GetBasicInfoByIds(ids []int64) []MovieBasicInfo {
// 如果存在nil值,则去mysql进行补全
if len(newIds) > 0 {
if err := db.Mdb.Model(&MovieDetail{}).Select("id, mid, cid, pid, name, sub_title, c_name, state, picture, actor, director,"+
" content, remarks, area, year").Where("mid IN (?)", ids).Find(&ml).Error; err != nil {
" content, remarks, area, year").Where("mid IN (?)", newIds).Find(&ml).Error; err != nil {
log.Println("BatchFind BasicInfo Failed: ", err)
return nil
}
@@ -747,17 +769,26 @@ func GetMultiplePlay(mIds []string, dbId int64) []SlaveMovieInfo {
continue
}
var s SlaveMovieInfo
// 优先使用dbID为key去redis中获取
if s = GetSlaveDetailInCache(c.Id, fmt.Sprintf("%d", dbId)); s.Mid != "" {
l = append(l, s)
continue
}
for _, mid := range mIds {
// 初始化临时变量 SlaveMovieInfo
v, err := db.Rdb.HGet(db.Cxt, fmt.Sprintf(config.MultipleSiteDetailKey, c.Id), mid).Result()
if err != nil {
// 如果没有获取到对应值, 则直接continue
continue
if s = GetSlaveDetailInCache(c.Id, mid); s.Mid != "" {
l = append(l, s)
break
}
// 如果获取到数据则直接退出本次循环
_ = json.Unmarshal([]byte(v), &s)
l = append(l, s)
break
//v, err := db.Rdb.HGet(db.Cxt, fmt.Sprintf(config.MultipleSiteDetailKey, c.Id), mid).Result()
//if err != nil {
// // 如果没有获取到对应值, 则直接continue
// continue
//}
//// 如果获取到数据则直接退出本次循环
//_ = json.Unmarshal([]byte(v), &s)
//l = append(l, s)
//break
}
// 如果迭代完s依旧为空,则去mysql中进行匹配
if s.Mid == "" {