50 lines
933 B
Go
50 lines
933 B
Go
package rockscache
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
"runtime/debug"
|
|
"time"
|
|
|
|
"github.com/go-redis/redis/v8"
|
|
)
|
|
|
|
var verbose = false
|
|
|
|
// SetVerbose sets verbose mode.
|
|
func SetVerbose(v bool) {
|
|
verbose = v
|
|
}
|
|
|
|
func debugf(format string, args ...interface{}) {
|
|
if verbose {
|
|
log.Printf(format, args...)
|
|
}
|
|
}
|
|
func now() int64 {
|
|
return time.Now().Unix()
|
|
}
|
|
|
|
type redisConn interface {
|
|
Eval(ctx context.Context, script string, keys []string, args ...interface{}) *redis.Cmd
|
|
}
|
|
|
|
func callLua(ctx context.Context, rdb redisConn, script string, keys []string, args []interface{}) (interface{}, error) {
|
|
debugf("callLua: script=%s, keys=%v, args=%v", script, keys, args)
|
|
v, err := rdb.Eval(ctx, script, keys, args).Result()
|
|
if err == redis.Nil {
|
|
err = nil
|
|
}
|
|
debugf("callLua result: v=%v, err=%v", v, err)
|
|
return v, err
|
|
}
|
|
|
|
func withRecover(f func()) {
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
debug.PrintStack()
|
|
}
|
|
}()
|
|
f()
|
|
}
|