84 lines
1.8 KiB
Go
84 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"ai_xhs/config"
|
|
"ai_xhs/database"
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"strconv"
|
|
)
|
|
|
|
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)
|
|
}
|
|
|
|
ctx := context.Background()
|
|
|
|
// 获取命令行参数
|
|
if len(os.Args) < 2 {
|
|
fmt.Println("用法: go run cmd/clear_bind_lock.go <employee_id>")
|
|
fmt.Println("示例: go run cmd/clear_bind_lock.go 1")
|
|
os.Exit(1)
|
|
}
|
|
|
|
employeeID, err := strconv.Atoi(os.Args[1])
|
|
if err != nil {
|
|
log.Fatalf("无效的员工ID: %v", err)
|
|
}
|
|
|
|
// 构造锁的key
|
|
lockKey := fmt.Sprintf("lock:bind_xhs:%d", employeeID)
|
|
|
|
// 检查锁是否存在
|
|
exists, err := database.RDB.Exists(ctx, lockKey).Result()
|
|
if err != nil {
|
|
log.Fatalf("检查锁失败: %v", err)
|
|
}
|
|
|
|
if exists > 0 {
|
|
// 获取锁的TTL
|
|
ttl, err := database.RDB.TTL(ctx, lockKey).Result()
|
|
if err != nil {
|
|
log.Printf("获取锁TTL失败: %v", err)
|
|
} else {
|
|
log.Printf("发现锁: %s, 剩余时间: %v", lockKey, ttl)
|
|
}
|
|
|
|
// 删除锁
|
|
err = database.RDB.Del(ctx, lockKey).Err()
|
|
if err != nil {
|
|
log.Fatalf("删除锁失败: %v", err)
|
|
}
|
|
|
|
log.Printf("✓ 成功删除锁: %s", lockKey)
|
|
} else {
|
|
log.Printf("未发现锁: %s", lockKey)
|
|
}
|
|
|
|
// 列出所有相关的锁
|
|
fmt.Println("\n=== 检查所有绑定相关的锁 ===")
|
|
keys, err := database.RDB.Keys(ctx, "lock:bind_xhs:*").Result()
|
|
if err != nil {
|
|
log.Printf("查询锁失败: %v", err)
|
|
} else {
|
|
if len(keys) > 0 {
|
|
fmt.Printf("发现 %d 个绑定锁:\n", len(keys))
|
|
for _, key := range keys {
|
|
ttl, _ := database.RDB.TTL(ctx, key).Result()
|
|
fmt.Printf(" - %s (TTL: %v)\n", key, ttl)
|
|
}
|
|
} else {
|
|
fmt.Println("未发现任何绑定锁")
|
|
}
|
|
}
|
|
}
|