This commit is contained in:
oneao committed 2026-02-26 17:31:08 +08:00
1 parent 4ce951dd56
commit 8a3dea8545
44 files changed
+1599 -30

No files matched your search

@@ -0,0 +1,95 @@
package redisx
import (
"context"
"errors"
"fmt"
"strconv"
"github.com/redis/go-redis/v9"
)
// 统一 key 生成函数
func spaceMemberKey(spaceID int64) string {
return fmt.Sprintf("space:member:%d", spaceID)
}
// SpaceAddOrUpdateMember 添加 / 更新成员角色
func SpaceAddOrUpdateMember(spaceID int64, userID int64, role int) error {
key := spaceMemberKey(spaceID)
return Client.HSet(
context.Background(),
key,
strconv.FormatInt(userID, 10),
role,
).Err()
}
// SpaceRemoveMember 删除成员
func SpaceRemoveMember(spaceID int64, userID int64) error {
key := spaceMemberKey(spaceID)
return Client.HDel(
context.Background(),
key,
strconv.FormatInt(userID, 10),
).Err()
}
// SpaceGetUserRole 获取成员角色
func SpaceGetUserRole(spaceID int64, userID int64) (int, bool, error) {
key := spaceMemberKey(spaceID)
val, err := Client.HGet(
context.Background(),
key,
strconv.FormatInt(userID, 10),
).Result()
if errors.Is(err, redis.Nil) {
return 0, false, nil
}
if err != nil {
return 0, false, err
}
role, err := strconv.Atoi(val)
if err != nil {
return 0, false, err
}
return role, true, nil
}
// SpaceIsMember 判断是否在空间
func SpaceIsMember(spaceID int64, userID int64) (bool, error) {
_, ok, err := SpaceGetUserRole(spaceID, userID)
return ok, err
}
// SpaceInitMembers 初始化用户成员
func SpaceInitMembers(spaceID int64, members map[int64]int) error {
key := spaceMemberKey(spaceID)
data := make(map[string]interface{})
for userID, role := range members {
data[strconv.FormatInt(userID, 10)] = role
}
return Client.HSet(
context.Background(),
key,
data,
).Err()
}
// SpaceDelete 删除空间
func SpaceDelete(spaceID int64) error {
key := spaceMemberKey(spaceID)
return Client.Del(
context.Background(),
key,
).Err()
}
@@ -0,0 +1,40 @@
package redisx
import (
"context"
"errors"
"time"
"github.com/redis/go-redis/v9"
)
var (
Client *redis.Client
)
func Set(key string, value interface{}, expire time.Duration) error {
return Client.Set(context.Background(), key, value, expire).Err()
}
// Get 获取任意 key 的值,返回 string
func Get(key string) (string, error) {
val, err := Client.Get(context.Background(), key).Result()
if errors.Is(err, redis.Nil) {
return "", nil
}
return val, err
}
// Delete 删除任意 key
func Delete(key string) error {
return Client.Del(context.Background(), key).Err()
}
// Exists 判断 key 是否存在
func Exists(key string) (bool, error) {
cnt, err := Client.Exists(context.Background(), key).Result()
if err != nil {
return false, err
}
return cnt > 0, nil
}