123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- package cms
- import (
- "context"
- "fmt"
- "go-common/app/interface/main/tv/model"
- "go-common/library/cache/memcache"
- "go-common/library/log"
- )
- const (
- _mcSnCMSKey = "sn_cms_%d"
- _mcEPCMSKey = "ep_cms_%d"
- )
- func snCMSCacheKey(sid int64) string {
- return fmt.Sprintf(_mcSnCMSKey, sid)
- }
- func epCMSCacheKey(epid int64) string {
- return fmt.Sprintf(_mcEPCMSKey, epid)
- }
- func keysTreat(ids []int64, keyFunc func(int64) string) (idmap map[string]int64, allKeys []string) {
- idmap = make(map[string]int64, len(ids))
- for _, id := range ids {
- k := keyFunc(id)
- allKeys = append(allKeys, k)
- idmap[k] = id
- }
- return
- }
- func missedTreat(idmap map[string]int64, lenCached int) (missed []int64) {
- missed = make([]int64, 0, len(idmap))
- for _, id := range idmap {
- missed = append(missed, id)
- }
- missedCount.Add("tv-meta", int64(len(missed)))
- cachedCount.Add("tv-meta", int64(lenCached))
- return
- }
- // SeasonsMetaCache season cms meta cache
- func (d *Dao) SeasonsMetaCache(c context.Context, ids []int64) (cached map[int64]*model.SeasonCMS, missed []int64, err error) {
- if len(ids) == 0 {
- return
- }
- cached = make(map[int64]*model.SeasonCMS, len(ids))
- idmap, allKeys := keysTreat(ids, snCMSCacheKey)
- conn := d.mc.Get(c)
- defer conn.Close()
- replys, err := conn.GetMulti(allKeys)
- if err != nil {
- PromError("mc:获取Season信息缓存")
- log.Error("conn.Gets(%v) error(%v)", allKeys, err)
- err = nil
- return
- }
- for key, item := range replys {
- art := &model.SeasonCMS{}
- if err = conn.Scan(item, art); err != nil {
- PromError("mc:获取Season信息缓存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
- }
- // EpMetaCache season cms meta cache
- func (d *Dao) EpMetaCache(c context.Context, ids []int64) (cached map[int64]*model.EpCMS, missed []int64, err error) {
- if len(ids) == 0 {
- return
- }
- cached = make(map[int64]*model.EpCMS, len(ids))
- allKeys := make([]string, 0, len(ids))
- idmap := make(map[string]int64, len(ids))
- for _, id := range ids {
- k := epCMSCacheKey(id)
- allKeys = append(allKeys, k)
- idmap[k] = id
- }
- conn := d.mc.Get(c)
- defer conn.Close()
- replys, err := conn.GetMulti(allKeys)
- if err != nil {
- PromError("mc:获取EP信息缓存")
- log.Error("conn.Gets(%v) error(%v)", allKeys, err)
- err = nil
- return
- }
- for key, item := range replys {
- art := &model.EpCMS{}
- if err = conn.Scan(item, art); err != nil {
- PromError("mc:获取EP信息缓存json解析")
- log.Error("item.Scan(%s) error(%v)", item.Value, err)
- err = nil
- continue
- }
- cached[idmap[key]] = art
- delete(idmap, key)
- }
- missed = make([]int64, 0, len(idmap))
- for _, id := range idmap {
- missed = append(missed, int64(id))
- }
- missedCount.Add("tv-meta", int64(len(missed)))
- cachedCount.Add("tv-meta", int64(len(cached)))
- return
- }
- //AddSeasonMetaCache add season meta cache
- func (d *Dao) AddSeasonMetaCache(c context.Context, vs ...*model.SeasonCMS) (err error) {
- conn := d.mc.Get(c)
- defer conn.Close()
- for _, v := range vs {
- if v == nil {
- continue
- }
- item := &memcache.Item{Key: snCMSCacheKey(v.SeasonID), Object: v, Flags: memcache.FlagJSON, Expiration: d.expireCMS}
- if err = conn.Set(item); err != nil {
- PromError("mc:增加Season信息缓存")
- log.Error("conn.Store(%s) error(%v)", snCMSCacheKey(v.SeasonID), err)
- return
- }
- }
- return
- }
- //AddEpMetaCache add ep meta cache
- func (d *Dao) AddEpMetaCache(c context.Context, vs ...*model.EpCMS) (err error) {
- conn := d.mc.Get(c)
- defer conn.Close()
- for _, v := range vs {
- if v == nil {
- continue
- }
- item := &memcache.Item{Key: epCMSCacheKey(v.EPID), Object: v, Flags: memcache.FlagJSON, Expiration: d.expireCMS}
- if err = conn.Set(item); err != nil {
- PromError("mc:增加EP信息缓存")
- log.Error("conn.Store(%s) error(%v)", epCMSCacheKey(v.EPID), err)
- return
- }
- }
- return
- }
|