dataRT/data/redis/zset.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()
}