Skip to content

Commit 51be768

Browse files
authored
Merge pull request #1 from ArtisanCloud/develop
Update
2 parents bd092bf + 533ccaa commit 51be768

File tree

4 files changed

+180
-5
lines changed

4 files changed

+180
-5
lines changed

pkg/cache/contract.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
// Cache 接口定义了缓存的基本操作
99
type CacheInterface interface {
1010
// Get 获取缓存值
11-
Get(ctx context.Context, key string) (interface{}, error)
11+
Get(ctx context.Context, key string) ([]byte, error)
1212

1313
// Set 设置缓存值
1414
Set(ctx context.Context, key string, value interface{}, expiration time.Duration) error

pkg/cache/memory.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ func NewMemoryCache() *MemoryCache {
1717
}
1818

1919
// Get 实现 Cache 接口的 Get 方法
20-
func (m *MemoryCache) Get(ctx context.Context, key string) (interface{}, error) {
20+
func (m *MemoryCache) Get(ctx context.Context, key string) ([]byte, error) {
2121
val, ok := m.store.Load(key)
2222
if !ok {
2323
return nil, nil // 键不存在
2424
}
25-
return val.(interface{}), nil
25+
return val.([]byte), nil
2626
}
2727

2828
// Set 实现 Cache 接口的 Set 方法

pkg/cache/redis_test.go

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
package cache
2+
3+
import (
4+
"context"
5+
"encoding/json"
6+
"testing"
7+
"time"
8+
9+
"github.com/redis/go-redis/v9"
10+
"github.com/stretchr/testify/assert"
11+
)
12+
13+
func setupRedis() *RedisCache {
14+
client := redis.NewClient(&redis.Options{
15+
Addr: "localhost:6379", // 真实 Redis 服务器地址
16+
Password: "", // 如果 Redis 设置了密码,在这里填入
17+
DB: 0, // 选择 Redis DB
18+
})
19+
return NewRedisCache(client)
20+
}
21+
22+
func TestRedisCache_Get(t *testing.T) {
23+
cache := setupRedis()
24+
ctx := context.Background()
25+
26+
// 先写入数据
27+
err := cache.Set(ctx, "key1", "value1", 10*time.Second)
28+
assert.NoError(t, err)
29+
30+
// 测试 key 存在时返回值
31+
val, err := cache.Get(ctx, "key1")
32+
assert.NoError(t, err)
33+
assert.Equal(t, []byte("value1"), val)
34+
35+
// 测试 key 不存在时返回 nil
36+
val, err = cache.Get(ctx, "key2")
37+
assert.NoError(t, err)
38+
assert.Nil(t, val)
39+
}
40+
41+
func TestRedisCache_Set(t *testing.T) {
42+
cache := setupRedis()
43+
ctx := context.Background()
44+
45+
err := cache.Set(ctx, "key1", "value1", 10*time.Second)
46+
assert.NoError(t, err)
47+
48+
// 验证数据是否真的被写入 Redis
49+
val, err := cache.Get(ctx, "key1")
50+
assert.NoError(t, err)
51+
assert.Equal(t, []byte("value1"), val)
52+
}
53+
54+
func TestRedisCache_SetObject(t *testing.T) {
55+
cache := setupRedis()
56+
ctx := context.Background()
57+
58+
// 定义一个对象
59+
type User struct {
60+
ID int `json:"id"`
61+
Name string `json:"name"`
62+
}
63+
64+
user := User{ID: 1, Name: "Alice"}
65+
66+
// 序列化为 JSON
67+
userJSON, err := json.Marshal(user)
68+
assert.NoError(t, err)
69+
70+
// 存入 Redis
71+
err = cache.Set(ctx, "user:1", userJSON, 10*time.Second)
72+
assert.NoError(t, err)
73+
74+
// 从 Redis 获取
75+
val, err := cache.Get(ctx, "user:1")
76+
assert.NoError(t, err)
77+
78+
// 反序列化 JSON
79+
var retrievedUser User
80+
err = json.Unmarshal(val, &retrievedUser)
81+
assert.NoError(t, err)
82+
83+
// 验证数据
84+
assert.Equal(t, user, retrievedUser)
85+
}
86+
87+
func TestRedisCache_Delete(t *testing.T) {
88+
cache := setupRedis()
89+
ctx := context.Background()
90+
91+
// 先存入数据
92+
err := cache.Set(ctx, "key1", "value1", 10*time.Second)
93+
assert.NoError(t, err)
94+
95+
// 删除数据
96+
err = cache.Delete(ctx, "key1")
97+
assert.NoError(t, err)
98+
99+
// 验证数据是否被删除
100+
val, err := cache.Get(ctx, "key1")
101+
assert.NoError(t, err)
102+
assert.Nil(t, val)
103+
}
104+
105+
func TestRedisCache_Exists(t *testing.T) {
106+
cache := setupRedis()
107+
ctx := context.Background()
108+
109+
// 先存入数据
110+
err := cache.Set(ctx, "key1", "value1", 10*time.Second)
111+
assert.NoError(t, err)
112+
113+
// 测试 key 是否存在
114+
exists, err := cache.Exists(ctx, "key1")
115+
assert.NoError(t, err)
116+
assert.True(t, exists)
117+
118+
// 测试 key 不存在
119+
exists, err = cache.Exists(ctx, "key2")
120+
assert.NoError(t, err)
121+
assert.False(t, exists)
122+
}
123+
124+
func TestRedisCache_Increment(t *testing.T) {
125+
cache := setupRedis()
126+
ctx := context.Background()
127+
128+
// 先删除 key 确保测试环境干净
129+
cache.Delete(ctx, "counter")
130+
131+
// 递增
132+
val, err := cache.Increment(ctx, "counter", 1)
133+
assert.NoError(t, err)
134+
assert.Equal(t, int64(1), val)
135+
}
136+
137+
func TestRedisCache_Decrement(t *testing.T) {
138+
cache := setupRedis()
139+
ctx := context.Background()
140+
141+
// 先确保计数器存在
142+
cache.Set(ctx, "counter", 10, 0)
143+
144+
// 递减
145+
val, err := cache.Decrement(ctx, "counter", 1)
146+
assert.NoError(t, err)
147+
assert.Equal(t, int64(9), val)
148+
}
149+
150+
func TestRedisCache_Expire(t *testing.T) {
151+
cache := setupRedis()
152+
ctx := context.Background()
153+
154+
// 先存入数据
155+
err := cache.Set(ctx, "key1", "value1", 0)
156+
assert.NoError(t, err)
157+
158+
// 设置过期时间
159+
err = cache.Expire(ctx, "key1", 2*time.Second)
160+
assert.NoError(t, err)
161+
162+
// 等待 3 秒,确保 key 过期
163+
time.Sleep(3 * time.Second)
164+
165+
// 验证 key 是否已经过期
166+
val, err := cache.Get(ctx, "key1")
167+
assert.NoError(t, err)
168+
assert.Nil(t, val)
169+
}

pkg/logger/manager.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package logger
22

33
import (
4+
"context"
45
"fmt"
5-
lumberjack "github.com/ArtisanCloud/MediaXCore/pkg/logger/lib"
6-
"github.com/ArtisanCloud/MediaXCore/pkg/logger/utils"
76
"os"
87
"sync"
98

9+
lumberjack "github.com/ArtisanCloud/MediaXCore/pkg/logger/lib"
10+
"github.com/ArtisanCloud/MediaXCore/pkg/logger/utils"
11+
1012
"github.com/ArtisanCloud/MediaXCore/pkg/logger/config"
1113
"github.com/ArtisanCloud/MediaXCore/pkg/logger/writer"
1214
"go.uber.org/zap"
@@ -117,6 +119,10 @@ func GetLogger(c *config.LogConfig) *Logger {
117119
return instance
118120
}
119121

122+
func (l *Logger) WithContext(ctx context.Context) *Logger {
123+
return l
124+
}
125+
120126
// Info 输出 Info 日志
121127
func (l *Logger) Info(msg string, fields ...zap.Field) {
122128
l.driver.Info(msg, fields...)

0 commit comments

Comments
 (0)