github.com/dtm-labs/rockscache@v0.1.1/utils.go (about) 1 package rockscache 2 3 import ( 4 "context" 5 "log" 6 "runtime/debug" 7 "time" 8 9 "github.com/redis/go-redis/v9" 10 ) 11 12 var verbose = false 13 14 // SetVerbose sets verbose mode. 15 func SetVerbose(v bool) { 16 verbose = v 17 } 18 19 func debugf(format string, args ...interface{}) { 20 if verbose { 21 log.Printf(format, args...) 22 } 23 } 24 func now() int64 { 25 return time.Now().Unix() 26 } 27 28 type redisConn interface { 29 Eval(ctx context.Context, script string, keys []string, args ...interface{}) *redis.Cmd 30 } 31 32 func callLua(ctx context.Context, rdb redisConn, script string, keys []string, args []interface{}) (interface{}, error) { 33 debugf("callLua: script=%s, keys=%v, args=%v", script, keys, args) 34 v, err := rdb.Eval(ctx, script, keys, args).Result() 35 if err == redis.Nil { 36 err = nil 37 } 38 debugf("callLua result: v=%v, err=%v", v, err) 39 return v, err 40 } 41 42 func withRecover(f func()) { 43 defer func() { 44 if r := recover(); r != nil { 45 debug.PrintStack() 46 } 47 }() 48 f() 49 }