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

65 lines
1.4 KiB
Go

package dao
import (
"context"
"fmt"
"go-common/app/service/main/member/model"
"go-common/library/cache/redis"
)
const (
_expShard = 10000
_expAddedPrefix = "ea_%s_%d_%d"
_expCoinPrefix = "ecoin_%d_%d"
)
const (
_share = "shareClick"
_view = "watch"
_login = "login"
)
func expCoinKey(mid, day int64) string {
return fmt.Sprintf(_expCoinPrefix, day, mid)
}
func expAddedKey(tp string, mid, day int64) string {
return fmt.Sprintf(_expAddedPrefix, tp, day, mid/_expShard)
}
// StatCache get exp stat cache.
func (d *Dao) StatCache(c context.Context, mid, day int64) (st *model.ExpStat, err error) {
conn := d.redis.Get(c)
defer conn.Close()
conn.Send("GETBIT", expAddedKey(_login, mid, day), mid%_expShard)
conn.Send("GETBIT", expAddedKey(_view, mid, day), mid%_expShard)
conn.Send("GETBIT", expAddedKey(_share, mid, day), mid%_expShard)
conn.Send("GET", expCoinKey(mid, day))
err = conn.Flush()
if err != nil {
return
}
st = new(model.ExpStat)
st.Login, err = redis.Bool(conn.Receive())
if err != nil && err != redis.ErrNil {
return
}
st.Watch, err = redis.Bool(conn.Receive())
if err != nil && err != redis.ErrNil {
return
}
st.Share, err = redis.Bool(conn.Receive())
if err != nil && err != redis.ErrNil {
return
}
st.Coin, err = redis.Int64(conn.Receive())
if err != nil && err != redis.ErrNil {
return
}
if err == redis.ErrNil {
err = nil
}
return
}