diff --git a/diagram/redis_init.go b/diagram/redis_init.go index 3aa0fa5..d1d7a22 100644 --- a/diagram/redis_init.go +++ b/diagram/redis_init.go @@ -30,8 +30,8 @@ func initClient(rCfg config.RedisConfig) *redis.Client { return client } -// InitClientInstance define func of return instance of redis client -func InitClientInstance(rCfg config.RedisConfig) *redis.Client { +// InitRedisClientInstance define func of return instance of redis client +func InitRedisClientInstance(rCfg config.RedisConfig) *redis.Client { once.Do(func() { _globalStorageClient = initClient(rCfg) }) diff --git a/diagram/redis_zset.go b/diagram/redis_zset.go new file mode 100644 index 0000000..30dcd7a --- /dev/null +++ b/diagram/redis_zset.go @@ -0,0 +1,44 @@ +// 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 +} diff --git a/handler/measurement_load.go b/handler/measurement_load.go index 4457910..1651999 100644 --- a/handler/measurement_load.go +++ b/handler/measurement_load.go @@ -10,7 +10,6 @@ import ( "github.com/gin-gonic/gin" ) -// TODO 优化redis 读取步骤 // MeasurementGetHandler retrieves the value of measurement data func MeasurementGetHandler(c *gin.Context) { var request network.MeasurementGetRequest @@ -24,6 +23,7 @@ func MeasurementGetHandler(c *gin.Context) { return } + // TODO 增加 redis 数据读取步骤 pgClient := database.GetPostgresDBClient() tx := pgClient.Begin() diff --git a/main.go b/main.go index 4bd7b4a..c5ece20 100644 --- a/main.go +++ b/main.go @@ -80,7 +80,7 @@ func main() { } defer parsePool.Release() - storageClient := diagram.InitClientInstance(modelRTConfig.StorageRedisConfig) + storageClient := diagram.InitRedisClientInstance(modelRTConfig.StorageRedisConfig) defer storageClient.Close() lockerClient := locker.InitClientInstance(modelRTConfig.LockerRedisConfig) diff --git a/network/measurement_request.go b/network/measurement_request.go new file mode 100644 index 0000000..d111432 --- /dev/null +++ b/network/measurement_request.go @@ -0,0 +1,7 @@ +// Package network define struct of network operation +package network + +// MeasurementGetRequest defines the request payload for getting an measurement +type MeasurementGetRequest struct { + MeasurementToken string `json:"token"` +}