package redis import ( "context" "github.com/redis/go-redis/v9" ) func ZRangeWithScores(ctx context.Context, key string, start int64, stop int64) ([]redis.Z, error) { zset, err := client.ZRangeWithScores(ctx, key, start, stop).Result() if err == redis.Nil { return nil, nil } else if err != nil { return nil, err } return zset, nil } func ZAdd(ctx context.Context, key string, members []redis.Z) error { return client.ZAdd(ctx, key, members...).Err() } func ZAtomicReplace(ctx context.Context, key string, members []redis.Z) error { script := ` redis.call('DEL', KEYS[1]) for i = 1, #ARGV, 2 do redis.call('ZADD', KEYS[1], ARGV[i], ARGV[i+1]) end return true ` var args []any for _, z := range members { args = append(args, z.Score, z.Member) } return client.Eval(ctx, script, []string{key}, args...).Err() }