45 lines
1.3 KiB
Go
45 lines
1.3 KiB
Go
|
|
// Package diagram provide diagram data structure and operation
|
||
|
|
package diagram
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
|
||
|
|
locker "modelRT/distributedlock"
|
||
|
|
"modelRT/logger"
|
||
|
|
|
||
|
|
"github.com/redis/go-redis/v9"
|
||
|
|
)
|
||
|
|
|
||
|
|
// RedisZSet defines the encapsulation struct of redis zset type
|
||
|
|
type RedisZSet struct {
|
||
|
|
ctx context.Context
|
||
|
|
rwLocker *locker.RedissionRWLocker
|
||
|
|
storageClient *redis.Client
|
||
|
|
}
|
||
|
|
|
||
|
|
// NewRedisZSet define func of new redis zset instance
|
||
|
|
func NewRedisZSet(ctx context.Context, key string, token string, lockLeaseTime uint64, needRefresh bool) *RedisHash {
|
||
|
|
return &RedisHash{
|
||
|
|
ctx: ctx,
|
||
|
|
rwLocker: locker.InitRWLocker(key, token, lockLeaseTime, needRefresh),
|
||
|
|
storageClient: GetRedisClientInstance(),
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// ZADD define func of add redis zset by members
|
||
|
|
func (rs *RedisZSet) ZADD(setKey string, score float64, member interface{}) error {
|
||
|
|
err := rs.rwLocker.WLock(rs.ctx)
|
||
|
|
if err != nil {
|
||
|
|
logger.Error(rs.ctx, "lock wLock by setKey failed", "set_key", setKey, "error", err)
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
defer rs.rwLocker.UnWLock(rs.ctx)
|
||
|
|
|
||
|
|
err = rs.storageClient.ZAdd(rs.ctx, setKey, redis.Z{Score: score, Member: member}).Err()
|
||
|
|
if err != nil {
|
||
|
|
logger.Error(rs.ctx, "add set by score and memebers failed", "set_key", setKey, "members", member, "error", err)
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
return nil
|
||
|
|
}
|