feat: 添加服务和数据库初始化

This commit is contained in:
2026-03-02 23:30:00 +08:00
parent 607ff9a055
commit 52cfe1b911
9 changed files with 1091 additions and 33 deletions

69
database/redis.go Normal file
View File

@@ -0,0 +1,69 @@
package database
import (
"context"
"fmt"
"sync"
"time"
"git.hujye.com/infrastructure/go-web-gin/config"
"git.hujye.com/infrastructure/go-web-gin/logger"
"github.com/redis/go-redis/v9"
)
var (
rdb *redis.Client
redisOnce sync.Once
)
// GetRedis returns the redis.Client singleton instance.
// It will initialize the connection on first call
func GetRedis() *redis.Client {
redisOnce.Do(func() {
rdb = initRedis()
})
return rdb
}
// initRedis initializes and returns a new redis.Client connection.
// It will panic if connection fails
func initRedis() *redis.Client {
cfg := config.Get().Redis
rdb := redis.NewClient(&redis.Options{
Addr: cfg.Addr,
Password: cfg.Password,
DB: cfg.DB,
PoolSize: cfg.PoolSize,
MinIdleConns: cfg.MinIdleConns,
MaxRetries: cfg.MaxRetries,
DialTimeout: time.Duration(cfg.DialTimeout) * time.Second,
ReadTimeout: time.Duration(cfg.ReadTimeout) * time.Second,
WriteTimeout: time.Duration(cfg.WriteTimeout) * time.Second,
})
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := rdb.Ping(ctx).Err(); err != nil {
logger.GetLogger().Error(nil, "redis connect failed", "addr", cfg.Addr, "error", err.Error())
panic(fmt.Sprintf("failed to connect to redis: %v", err))
}
logger.GetLogger().Info(nil, "redis connected successfully", "addr", cfg.Addr, "db", cfg.DB)
return rdb
}
// CloseRedis closes the redis connection.
// Returns error if close fails, nil otherwise
func CloseRedis() error {
if rdb != nil {
if err := rdb.Close(); err != nil {
logger.GetLogger().Error(nil, "redis close failed", "error", err.Error())
return err
}
logger.GetLogger().Info(nil, "redis connection closed")
}
return nil
}