init_service.go 986 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package utils
  2. import (
  3. "context"
  4. "fmt"
  5. "go-policy-service/config"
  6. "time"
  7. "github.com/go-redis/redis/v8"
  8. "gorm.io/driver/mysql"
  9. "gorm.io/gorm"
  10. )
  11. var Db *gorm.DB
  12. var Rdb *redis.Client
  13. func InitDB(cfg *config.Config) error {
  14. dsn := getDSN(cfg)
  15. conn, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
  16. if err != nil {
  17. return err
  18. }
  19. Db = conn
  20. return nil
  21. }
  22. func getDSN(cfg *config.Config) string {
  23. return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4",
  24. cfg.DBUser,
  25. cfg.DBPassword,
  26. cfg.DBHost,
  27. cfg.DBPort,
  28. cfg.DBName)
  29. }
  30. // 初始化 Redis
  31. func InitRedis(cfg *config.Config) error {
  32. Rdb = redis.NewClient(&redis.Options{
  33. Addr: fmt.Sprintf("%s:%d", cfg.RedisHost, cfg.RedisPort),
  34. Password: cfg.RedisPassword,
  35. DB: cfg.RedisDB,
  36. })
  37. ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
  38. defer cancel()
  39. if _, err := Rdb.Ping(ctx).Result(); err != nil {
  40. return fmt.Errorf("redis connection failed: %w", err)
  41. }
  42. return nil
  43. }