123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- package account
- import (
- "context"
- "crypto/md5"
- "encoding/binary"
- "encoding/hex"
- "strconv"
- "time"
- "go-common/library/cache/memcache"
- "go-common/library/log"
- )
- const (
- _addMidAndTitlePrefix = "add_midtitle_"
- _addMidHalfMinPrefix = "add_midhafmin_"
- )
- func limitMidHafMin(mid int64) string {
- return _addMidHalfMinPrefix + strconv.FormatInt(mid, 10)
- }
- func limitMidSameTitle(mid int64, title string) string {
- ms := md5.Sum([]byte(title))
- return _addMidAndTitlePrefix + strconv.FormatInt(mid, 10) + "_" + hex.EncodeToString(ms[:])
- }
- // HalfMin fn
- func (d *Dao) HalfMin(c context.Context, mid int64) (exist bool, ts uint64, err error) {
- var (
- conn = d.mc.Get(c)
- rp *memcache.Item
- )
- defer conn.Close()
- key := limitMidHafMin(mid)
- rp, err = conn.Get(key)
- if err != nil {
- if err == memcache.ErrNotFound {
- err = nil
- } else {
- log.Error("conn.Get error(%v) | key(%s) mid(%d)", err, key, mid)
- }
- return
- }
- if err = conn.Scan(rp, &ts); err != nil {
- log.Error("conn.Scan(%s) error(%v)", rp.Value, err)
- return
- }
- log.Info("HalfMin key(%s) ts(%d)", key, ts)
- if ts != 0 {
- exist = true
- }
- return
- }
- // AddHalfMin fn
- func (d *Dao) AddHalfMin(c context.Context, mid int64) (err error) {
- conn := d.mc.Get(c)
- defer conn.Close()
- key := limitMidHafMin(mid)
- ts := time.Now().Unix()
- if err = conn.Set(&memcache.Item{Key: key, Object: ts, Flags: memcache.FlagJSON, Expiration: d.mcLimitAddBasicExp}); err != nil {
- log.Error("memcache.set error(%v) | key(%s) mid(%d)", err, key, mid)
- }
- return
- }
- // DelHalfMin func
- func (d *Dao) DelHalfMin(c context.Context, mid int64) (err error) {
- conn := d.mc.Get(c)
- defer conn.Close()
- if err = conn.Delete(limitMidHafMin(mid)); err == memcache.ErrNotFound {
- err = nil
- }
- return
- }
- // SubmitCache get user submit cache.
- func (d *Dao) SubmitCache(c context.Context, mid int64, title string) (exist int8, err error) {
- var (
- conn = d.mc.Get(c)
- rp *memcache.Item
- )
- defer conn.Close()
- key := limitMidSameTitle(mid, title)
- rp, err = conn.Get(key)
- if err != nil {
- if err == memcache.ErrNotFound {
- err = nil
- } else {
- log.Error("conn.Get error(%v) | key(%s) mid(%d) title(%s)", err, key, mid, title)
- }
- }
- if rp != nil {
- exist = int8(binary.BigEndian.Uint64(rp.Value))
- }
- return
- }
- // AddSubmitCache add submit cache into mc.
- func (d *Dao) AddSubmitCache(c context.Context, mid int64, title string) (err error) {
- conn := d.mc.Get(c)
- defer conn.Close()
- key := limitMidSameTitle(mid, title)
- bs := make([]byte, 8)
- binary.BigEndian.PutUint64(bs, 1)
- if err = conn.Set(&memcache.Item{Key: key, Object: bs, Flags: memcache.FlagJSON, Expiration: d.mcSubExp}); err != nil {
- log.Error("memcache.set error(%v) | key(%s) mid(%d) title(%s)", err, key, mid, title)
- }
- return
- }
- // DelSubmitCache func
- func (d *Dao) DelSubmitCache(c context.Context, mid int64, title string) (err error) {
- conn := d.mc.Get(c)
- defer conn.Close()
- if err = conn.Delete(limitMidSameTitle(mid, title)); err == memcache.ErrNotFound {
- err = nil
- }
- return
- }
- func (d *Dao) pingMemcache(c context.Context) (err error) {
- conn := d.mc.Get(c)
- defer conn.Close()
- if err = conn.Set(&memcache.Item{Key: "ping", Value: []byte("pong"), Expiration: 0}); err != nil {
- log.Error("mc.ping.Store error(%v)", err)
- return
- }
- return
- }
|