Create & Init Project...
This commit is contained in:
88
app/service/main/location/zlimit/cache.go
Normal file
88
app/service/main/location/zlimit/cache.go
Normal file
@ -0,0 +1,88 @@
|
||||
package zlimit
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strconv"
|
||||
|
||||
"go-common/library/cache/redis"
|
||||
"go-common/library/log"
|
||||
)
|
||||
|
||||
func keyZlimit(aid int64) (key string) {
|
||||
key = _prefixBlackList + strconv.FormatInt(aid, 10)
|
||||
return
|
||||
}
|
||||
|
||||
// existsRule if existes ruls in redis
|
||||
func (s *Service) existsRule(c context.Context, aid int64) (ok bool, err error) {
|
||||
conn := s.redis.Get(c)
|
||||
defer conn.Close()
|
||||
if ok, err = redis.Bool(conn.Do("EXISTS", keyZlimit(aid))); err != nil {
|
||||
log.Error("conn.DO(HEXISTS) error(%v)", err)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// rule get zone rule from redis
|
||||
func (s *Service) rule(c context.Context, aid int64, zoneids []int64) (res []int64, err error) {
|
||||
var playauth int64
|
||||
key := keyZlimit(aid)
|
||||
conn := s.redis.Get(c)
|
||||
defer conn.Close()
|
||||
for _, v := range zoneids {
|
||||
if err = conn.Send("HGET", key, v); err != nil {
|
||||
log.Error("rule conn.Send(HGET, %s, %d) error(%v)", key, v, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
if err = conn.Flush(); err != nil {
|
||||
log.Error("rule conn.Flush error(%v)", err)
|
||||
return
|
||||
}
|
||||
for i := 0; i < len(zoneids); i++ {
|
||||
if playauth, err = redis.Int64(conn.Receive()); err != nil {
|
||||
if err != redis.ErrNil {
|
||||
log.Error("rule conn.Receive()%d error(%v)", i+1, err)
|
||||
return
|
||||
}
|
||||
err = nil
|
||||
}
|
||||
res = append(res, playauth)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// addRule add zone rule from redis
|
||||
func (s *Service) addRule(c context.Context, zoneids map[int64]map[int64]int64) (err error) {
|
||||
var key string
|
||||
conn := s.redis.Get(c)
|
||||
defer conn.Close()
|
||||
count := 0
|
||||
for aid, zids := range zoneids {
|
||||
if key == "" {
|
||||
key = keyZlimit(aid)
|
||||
}
|
||||
for zid, auth := range zids {
|
||||
if err = conn.Send("HSET", key, zid, auth); err != nil {
|
||||
log.Error("add conn.Send error(%v)", err)
|
||||
return
|
||||
}
|
||||
count++
|
||||
}
|
||||
}
|
||||
if err = conn.Send("EXPIRE", key, s.expire); err != nil {
|
||||
log.Error("add conn.Send error(%v)", err)
|
||||
return
|
||||
}
|
||||
if err = conn.Flush(); err != nil {
|
||||
log.Error("add conn.Flush error(%v)", err)
|
||||
return
|
||||
}
|
||||
for i := 0; i <= count; i++ {
|
||||
if _, err = conn.Receive(); err != nil {
|
||||
log.Error("add conn.Receive()%d error(%v)", i+1, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
Reference in New Issue
Block a user