12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- package dao
- import (
- "context"
- "fmt"
- "time"
- "go-common/library/cache/redis"
- "go-common/library/log"
- "go-common/library/net/ip"
- )
- func reviewAuditNotifyLockKey(t time.Time) string {
- prefix := t.Format("2006-01-02-15")
- if t.Minute() < 30 {
- return fmt.Sprintf("review_notify_%s_00", prefix)
- }
- return fmt.Sprintf("review_notify_%s_30", prefix)
- }
- func (d *Dao) pingRedis(c context.Context) error {
- conn := d.redis.Get(c)
- defer conn.Close()
- _, err := conn.Do("SET", "ping", "pong")
- return err
- }
- // TryLockReviewNotify is
- func (d *Dao) TryLockReviewNotify(c context.Context, t time.Time) (bool, error) {
- key := reviewAuditNotifyLockKey(t)
- conn := d.redis.Get(c)
- defer conn.Close()
- locked, err := redis.Bool(conn.Do("SETNX", key, fmt.Sprintf("%s::%s", ip.InternalIP(), t)))
- if err != nil {
- return false, err
- }
- if !locked {
- return false, nil
- }
- if _, err := conn.Do("EXPIRE", key, 60*60); err != nil {
- log.Error("Failed to set expire on key: %s: %+v", key, err)
- // return
- }
- return locked, nil
- }
|