You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.3 KiB
91 lines
2.3 KiB
package cms |
|
|
|
import ( |
|
"context" |
|
"fmt" |
|
|
|
"go-common/app/interface/main/tv/model" |
|
"go-common/library/log" |
|
) |
|
|
|
const ( |
|
_arcCMSDeleted = 1 |
|
_mcArcCMSKey = "arc_cms_%d" |
|
_mcVideoCMSKey = "video_cms_%d" |
|
) |
|
|
|
// ArcCMSCacheKey . |
|
func (d *Dao) ArcCMSCacheKey(aid int64) string { |
|
return fmt.Sprintf(_mcArcCMSKey, aid) |
|
} |
|
|
|
// VideoCMSCacheKey . |
|
func (d *Dao) VideoCMSCacheKey(cid int64) string { |
|
return fmt.Sprintf(_mcVideoCMSKey, cid) |
|
} |
|
|
|
// ArcsMetaCache pick archive cms meta cache |
|
func (d *Dao) ArcsMetaCache(c context.Context, ids []int64) (cached map[int64]*model.ArcCMS, missed []int64, err error) { |
|
if len(ids) == 0 { |
|
return |
|
} |
|
cached = make(map[int64]*model.ArcCMS, len(ids)) |
|
idmap, allKeys := keysTreat(ids, d.ArcCMSCacheKey) |
|
conn := d.mc.Get(c) |
|
defer conn.Close() |
|
replys, err := conn.GetMulti(allKeys) |
|
if err != nil { |
|
PromError("mc:获取Archive信息缓存") |
|
log.Error("conn.Gets(%v) error(%v)", allKeys, err) |
|
err = nil |
|
return |
|
} |
|
for key, item := range replys { |
|
art := &model.ArcCMS{} |
|
if err = conn.Scan(item, art); err != nil { |
|
PromError("mc:获取Archive信息缓存json解析") |
|
log.Error("item.Scan(%s) error(%v)", item.Value, err) |
|
err = nil |
|
continue |
|
} |
|
cached[idmap[key]] = art |
|
delete(idmap, key) |
|
} |
|
missed = missedTreat(idmap, len(cached)) |
|
return |
|
} |
|
|
|
// VideosMetaCache pick video cms meta cache |
|
func (d *Dao) VideosMetaCache(c context.Context, ids []int64) (cached map[int64]*model.VideoCMS, missed []int64, err error) { |
|
if len(ids) == 0 { |
|
return |
|
} |
|
cached = make(map[int64]*model.VideoCMS, len(ids)) |
|
idmap, allKeys := keysTreat(ids, d.VideoCMSCacheKey) |
|
conn := d.mc.Get(c) |
|
defer conn.Close() |
|
replys, err := conn.GetMulti(allKeys) |
|
if err != nil { |
|
PromError("mc:获取Video信息缓存") |
|
log.Error("conn.Gets(%v) error(%v)", allKeys, err) |
|
err = nil |
|
return |
|
} |
|
for key, item := range replys { |
|
art := &model.VideoCMS{} |
|
if err = conn.Scan(item, art); err != nil { |
|
PromError("mc:获取Video信息缓存缓存json解析") |
|
log.Error("item.Scan(%s) error(%v)", item.Value, err) |
|
err = nil |
|
continue |
|
} |
|
if art.Deleted == _arcCMSDeleted { // if it's deleted, we ignore it |
|
log.Info("ArcCMS deleted, %v, %v", item, art) |
|
continue |
|
} |
|
cached[idmap[key]] = art |
|
delete(idmap, key) |
|
} |
|
missed = missedTreat(idmap, len(cached)) |
|
return |
|
}
|
|
|