yjp преди 2 месеца
родител
ревизия
692a87e654
променени са 1 файла, в които са добавени 81 реда и са изтрити 0 реда
  1. 81 0
      redis_client/redis_client.go

+ 81 - 0
redis_client/redis_client.go

@@ -0,0 +1,81 @@
+package redis_client
+
+import (
+	"context"
+	"errors"
+	"github.com/redis/go-redis/v9"
+	"time"
+)
+
+type Client struct {
+	redisClient *redis.Client
+}
+
+func NewClient(address string, userName string, password string, db int) (*Client, error) {
+	if address == "" {
+		return nil, errors.New("redis address不能为空")
+	}
+
+	return &Client{redisClient: redis.NewClient(&redis.Options{
+		Addr:     address,
+		Username: userName,
+		Password: password,
+		DB:       db,
+	})}, nil
+}
+
+func Destroy(client *Client) error {
+	if client == nil || client.redisClient == nil {
+		return nil
+	}
+
+	err := client.redisClient.Close()
+	if err != nil {
+		return err
+	}
+
+	client.redisClient = nil
+
+	return nil
+}
+
+func (client *Client) Set(key string, value any, expireSec int64) error {
+	cmd := client.redisClient.Set(context.Background(), key, value, time.Second*time.Duration(expireSec))
+	if cmd.Err() != nil {
+		return cmd.Err()
+	}
+
+	return nil
+}
+
+func (client *Client) Get(key string) (any, error) {
+	cmd := client.redisClient.Get(context.Background(), key)
+	if cmd.Err() != nil {
+		if cmd.Err().Error() == redis.Nil.Error() {
+			return nil, nil
+		}
+
+		return nil, cmd.Err()
+	}
+
+	return cmd.Val(), nil
+}
+
+func (client *Client) GetMulti(keys []string) (map[string]any, error) {
+	result := make(map[string]any)
+	for _, key := range keys {
+		cmd := client.redisClient.Get(context.Background(), key)
+		if cmd.Err() != nil {
+			if cmd.Err().Error() == redis.Nil.Error() {
+				result[key] = nil
+				continue
+			}
+
+			return nil, cmd.Err()
+		}
+
+		result[key] = cmd.Val()
+	}
+
+	return result, nil
+}