169 lines
4.6 KiB
Go
169 lines
4.6 KiB
Go
package main
|
|
|
|
import (
|
|
"ai_xhs/config"
|
|
"ai_xhs/database"
|
|
"ai_xhs/utils"
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"time"
|
|
)
|
|
|
|
// TestData 测试数据结构
|
|
type TestData struct {
|
|
Name string `json:"name"`
|
|
Age int `json:"age"`
|
|
Email string `json:"email"`
|
|
}
|
|
|
|
func main() {
|
|
// 加载配置
|
|
if err := config.LoadConfig("dev"); err != nil {
|
|
log.Fatalf("配置加载失败: %v", err)
|
|
}
|
|
|
|
// 初始化Redis
|
|
if err := database.InitRedis(); err != nil {
|
|
log.Fatalf("Redis初始化失败: %v", err)
|
|
}
|
|
defer database.CloseRedis()
|
|
|
|
ctx := context.Background()
|
|
|
|
fmt.Println("\n=== Redis缓存功能测试 ===\n")
|
|
|
|
// 1. 测试基本的Set/Get
|
|
fmt.Println("1. 测试基本Set/Get操作:")
|
|
testData := TestData{
|
|
Name: "张三",
|
|
Age: 25,
|
|
Email: "zhangsan@example.com",
|
|
}
|
|
|
|
if err := utils.SetCache(ctx, "user:1001", testData, 5*time.Minute); err != nil {
|
|
log.Fatalf("设置缓存失败: %v", err)
|
|
}
|
|
fmt.Println("✓ 缓存设置成功")
|
|
|
|
var result TestData
|
|
if err := utils.GetCache(ctx, "user:1001", &result); err != nil {
|
|
log.Fatalf("获取缓存失败: %v", err)
|
|
}
|
|
fmt.Printf("✓ 缓存获取成功: %+v\n", result)
|
|
|
|
// 2. 测试Exists
|
|
fmt.Println("\n2. 测试缓存是否存在:")
|
|
exists, err := utils.ExistsCache(ctx, "user:1001")
|
|
if err != nil {
|
|
log.Fatalf("检查缓存失败: %v", err)
|
|
}
|
|
fmt.Printf("✓ 缓存存在性检查: %v\n", exists)
|
|
|
|
// 3. 测试TTL
|
|
fmt.Println("\n3. 测试获取TTL:")
|
|
ttl, err := utils.GetTTL(ctx, "user:1001")
|
|
if err != nil {
|
|
log.Fatalf("获取TTL失败: %v", err)
|
|
}
|
|
fmt.Printf("✓ 缓存TTL: %v\n", ttl)
|
|
|
|
// 4. 测试计数器
|
|
fmt.Println("\n4. 测试计数器操作:")
|
|
count, err := utils.IncrCache(ctx, "counter:test")
|
|
if err != nil {
|
|
log.Fatalf("递增失败: %v", err)
|
|
}
|
|
fmt.Printf("✓ 递增后计数: %d\n", count)
|
|
|
|
count, err = utils.IncrCache(ctx, "counter:test")
|
|
if err != nil {
|
|
log.Fatalf("递增失败: %v", err)
|
|
}
|
|
fmt.Printf("✓ 再次递增后计数: %d\n", count)
|
|
|
|
// 5. 测试Hash操作
|
|
fmt.Println("\n5. 测试Hash操作:")
|
|
if err := utils.HSetCache(ctx, "user:hash:1001", "name", "李四"); err != nil {
|
|
log.Fatalf("HSet失败: %v", err)
|
|
}
|
|
if err := utils.HSetCache(ctx, "user:hash:1001", "age", "30"); err != nil {
|
|
log.Fatalf("HSet失败: %v", err)
|
|
}
|
|
fmt.Println("✓ Hash字段设置成功")
|
|
|
|
name, err := utils.HGetCache(ctx, "user:hash:1001", "name")
|
|
if err != nil {
|
|
log.Fatalf("HGet失败: %v", err)
|
|
}
|
|
fmt.Printf("✓ 获取Hash字段 name: %s\n", name)
|
|
|
|
allFields, err := utils.HGetAllCache(ctx, "user:hash:1001")
|
|
if err != nil {
|
|
log.Fatalf("HGetAll失败: %v", err)
|
|
}
|
|
fmt.Printf("✓ 获取所有Hash字段: %+v\n", allFields)
|
|
|
|
// 6. 测试Set操作
|
|
fmt.Println("\n6. 测试Set操作:")
|
|
if err := utils.SAddCache(ctx, "tags:1001", "golang", "redis", "mysql"); err != nil {
|
|
log.Fatalf("SAdd失败: %v", err)
|
|
}
|
|
fmt.Println("✓ Set成员添加成功")
|
|
|
|
members, err := utils.SMembersCache(ctx, "tags:1001")
|
|
if err != nil {
|
|
log.Fatalf("SMembers失败: %v", err)
|
|
}
|
|
fmt.Printf("✓ 获取Set所有成员: %v\n", members)
|
|
|
|
// 7. 测试ZSet操作
|
|
fmt.Println("\n7. 测试ZSet操作:")
|
|
if err := utils.ZAddCache(ctx, "rank:score", 100.5, "user1"); err != nil {
|
|
log.Fatalf("ZAdd失败: %v", err)
|
|
}
|
|
if err := utils.ZAddCache(ctx, "rank:score", 95.0, "user2"); err != nil {
|
|
log.Fatalf("ZAdd失败: %v", err)
|
|
}
|
|
if err := utils.ZAddCache(ctx, "rank:score", 105.5, "user3"); err != nil {
|
|
log.Fatalf("ZAdd失败: %v", err)
|
|
}
|
|
fmt.Println("✓ ZSet成员添加成功")
|
|
|
|
rangeResult, err := utils.ZRangeCache(ctx, "rank:score", 0, -1)
|
|
if err != nil {
|
|
log.Fatalf("ZRange失败: %v", err)
|
|
}
|
|
fmt.Printf("✓ 获取ZSet所有成员(按分数排序): %v\n", rangeResult)
|
|
|
|
// 8. 测试删除操作
|
|
fmt.Println("\n8. 测试删除操作:")
|
|
if err := utils.DelCache(ctx, "counter:test", "tags:1001", "rank:score"); err != nil {
|
|
log.Fatalf("删除缓存失败: %v", err)
|
|
}
|
|
fmt.Println("✓ 缓存删除成功")
|
|
|
|
// 9. 测试SetNX (仅当key不存在时设置)
|
|
fmt.Println("\n9. 测试SetNX操作:")
|
|
success, err := utils.SetCacheNX(ctx, "lock:test", "locked", 10*time.Second)
|
|
if err != nil {
|
|
log.Fatalf("SetNX失败: %v", err)
|
|
}
|
|
fmt.Printf("✓ SetNX首次设置: %v\n", success)
|
|
|
|
success, err = utils.SetCacheNX(ctx, "lock:test", "locked", 10*time.Second)
|
|
if err != nil {
|
|
log.Fatalf("SetNX失败: %v", err)
|
|
}
|
|
fmt.Printf("✓ SetNX重复设置(应该失败): %v\n", success)
|
|
|
|
// 清理测试数据
|
|
fmt.Println("\n10. 清理测试数据:")
|
|
if err := utils.DelCache(ctx, "user:1001", "user:hash:1001", "lock:test"); err != nil {
|
|
log.Fatalf("清理失败: %v", err)
|
|
}
|
|
fmt.Println("✓ 测试数据清理完成")
|
|
|
|
fmt.Println("\n=== 所有测试完成! ===")
|
|
}
|