add redis zset structure

This commit is contained in:
douxu 2025-09-09 16:02:36 +08:00
parent 3120cfc3a5
commit 55a606a3f3
5 changed files with 55 additions and 4 deletions

View File

@ -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)
})

44
diagram/redis_zset.go Normal file
View File

@ -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
}

View File

@ -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()

View File

@ -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)

View File

@ -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"`
}