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  }