40 lines
892 B
Go
40 lines
892 B
Go
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()
|
|
}
|