bilibili-backup/app/service/main/point/dao/memcache.go
2019-04-22 02:59:20 +00:00

85 lines
1.7 KiB
Go

package dao
import (
"context"
"fmt"
"go-common/app/service/main/point/model"
gmc "go-common/library/cache/memcache"
"github.com/pkg/errors"
)
const (
_pointInfo = "pti:%d"
)
func pointKey(mid int64) string {
return fmt.Sprintf(_pointInfo, mid)
}
//DelPointInfoCache .
func (d *Dao) DelPointInfoCache(c context.Context, mid int64) (err error) {
return d.delCache(c, pointKey(mid))
}
// PointInfoCache .
func (d *Dao) PointInfoCache(c context.Context, mid int64) (pi *model.PointInfo, err error) {
var (
item *gmc.Item
)
key := pointKey(mid)
conn := d.mc.Get(c)
defer conn.Close()
if item, err = conn.Get(key); err != nil {
if err == gmc.ErrNotFound {
err = nil
pi = nil
return
}
err = errors.Wrapf(err, "d.PointInfoCache(%d)", mid)
d.errProm.Incr("get_mc")
return
}
pi = new(model.PointInfo)
if err = conn.Scan(item, pi); err != nil {
err = errors.Wrapf(err, "conn.Scan(%d)", pi.Mid)
d.errProm.Incr("scan_mc")
}
return
}
// SetPointInfoCache .
func (d *Dao) SetPointInfoCache(c context.Context, pi *model.PointInfo) (err error) {
key := pointKey(pi.Mid)
conn := d.mc.Get(c)
defer conn.Close()
item := &gmc.Item{
Key: key,
Object: pi,
Expiration: d.mcExpire,
Flags: gmc.FlagJSON,
}
if err = conn.Set(item); err != nil {
err = errors.Wrapf(err, "d.SetPointInfoCache(%d)", pi.Mid)
d.errProm.Incr("set_mc")
return
}
return
}
// DelCache del cache.
func (d *Dao) delCache(c context.Context, key string) (err error) {
conn := d.mc.Get(c)
defer conn.Close()
if err = conn.Delete(key); err != nil {
if err == gmc.ErrNotFound {
err = nil
} else {
err = errors.Wrapf(err, "conn.Delete(%s)", key)
d.errProm.Incr("del_mc")
}
}
return
}