You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
843 B
Go

package export
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
"time"
)
type RedisPart struct {
ctx context.Context
client *redis.Client
redisKey string
}
func NewRedisPart(ctx context.Context, client *redis.Client, redisKey string) *RedisPart {
return &RedisPart{
ctx: ctx,
client: client,
redisKey: redisKey,
}
}
func (s *RedisPart) FinishPart(spn int, fn ...PartDone) TaskOption {
return UseFinishPart(spn, func(spn, nfp float64) {
s.client.HSet(s.ctx, s.redisKey, "schedule", fmt.Sprintf("%.1f", nfp/spn))
s.client.Expire(s.ctx, s.redisKey, 2*time.Minute)
for _, f := range fn {
f(spn, nfp)
}
})
}
func (s *RedisPart) Schedule() string {
return s.client.HGet(s.ctx, s.redisKey, "schedule").Val()
}
func (s *RedisPart) Close() error {
return s.client.Del(s.ctx, s.redisKey).Err()
}