go-common/app/admin/main/workflow/dao/memcache.go
2019-04-22 18:49:16 +08:00

71 lines
1.7 KiB
Go

package dao
import (
"context"
"encoding/json"
"go-common/library/conf/paladin"
"time"
"go-common/app/admin/main/workflow/model/search"
"go-common/library/cache/memcache"
"go-common/library/log"
)
const (
_prefixChallPendingCount = "wkf_cpc_uid_%d"
)
// pingMC ping memcache.
func (d *Dao) pingMC(c context.Context) (err error) {
conn := d.mc.Get(c)
//if err = conn.Store("set", "ping", []byte{1}, 0, d.mcExpire, 0); err != nil {
if err = conn.Set(&memcache.Item{Key: "ping", Value: []byte{1}, Expiration: 0}); err != nil {
log.Error("conn.Store(set, ping, 1) error(%v)", err)
}
conn.Close()
return
}
// ChallCountCache read pending chall count by uid from memcache
func (d *Dao) ChallCountCache(c context.Context, uid int64) (challCount *search.ChallCount, err error) {
var (
conn memcache.Conn
item *memcache.Item
key string
)
conn = d.mc.Get(c)
defer conn.Close()
key = d.keyChallCount(uid)
if item, err = conn.Get(key); err != nil {
if err == memcache.ErrNotFound {
err = nil
return
}
return
}
err = json.Unmarshal(item.Value, &challCount)
return
}
// UpChallCountCache will write chall count to cache
func (d *Dao) UpChallCountCache(c context.Context, challCount *search.ChallCount, uid int64) (err error) {
var (
conn memcache.Conn
item *memcache.Item
jsonChallCount []byte
)
jsonChallCount, err = json.Marshal(challCount)
if err != nil {
return
}
conn = d.mc.Get(c)
defer conn.Close()
item = &memcache.Item{
Key: d.keyChallCount(uid),
Value: jsonChallCount,
Expiration: int32(paladin.Duration(d.c.Get("expireCount"), time.Duration(10*time.Second)) / time.Second),
}
err = conn.Set(item)
return
}