Compare commits

..

6 Commits

Author SHA1 Message Date
f70f8d94db fix(with): 修复 memory.go 中的配置初始化错误
将 bigcache.Config 结构体实例改为指针传递,确保配置能够正确初始化和传递。
2025-09-20 11:32:24 +08:00
257f0a6b6e fix(with): 优化 memory cache 配置初始化逻辑
移除未使用的 `encoding/json` 包导入。
调整配置初始化方式,避免不必要的结构体拷贝。
改进日志输出内容,仅显示关键配置项。
2025-09-20 11:21:02 +08:00
5e25e8eccc fix(with/etcd): 修改Etcd配置为空时的处理逻辑
当Etcd配置或端点为空时,将panic改为直接返回,避免程序崩溃
2025-09-20 11:08:47 +08:00
4f584726d6 ```
refactor(with): 调整Memory函数参数顺序

将Memory函数的参数顺序从(opts, cli)调整为(cli, opts),
使函数签名更加符合常规的客户端优先参数排列习惯,
提升代码可读性和一致性。
```
2025-09-20 10:59:45 +08:00
b9d144353e ```
refactor(cache): 移除内存缓存和Redis缓存的初始化逻辑

移除了mem包中内存缓存的初始化函数,以及with包中Redis缓存的初始化函数。
这些缓存初始化逻辑将被重构到其他位置或采用新的实现方式。
```
2025-09-20 10:55:06 +08:00
7e7fa16441 ```
feat(database): 新增数据库初始化函数

新增 NewDatabase 函数,支持根据驱动类型初始化 MySQL 或 Postgres 数据库连接。
该函数根据传入的驱动名称自动路由到对应的数据库连接创建逻辑,并提供错误处理。
```
2025-09-20 10:30:06 +08:00
6 changed files with 153 additions and 14 deletions

14
cache/mem/mem.go vendored
View File

@@ -1,14 +0,0 @@
package mem
import (
"git.apinb.com/bsm-sdk/core/vars"
"github.com/FishGoddess/cachego"
)
func New() cachego.Cache {
return cachego.NewCache(
cachego.WithGC(vars.MemGcDuration),
cachego.WithShardings(vars.MemShardings),
cachego.WithLFU(vars.MemLRUMaxNumber),
)
}

View File

@@ -1,6 +1,9 @@
package database package database
import ( import (
"fmt"
"strings"
"git.apinb.com/bsm-sdk/core/database/sql" "git.apinb.com/bsm-sdk/core/database/sql"
"git.apinb.com/bsm-sdk/core/types" "git.apinb.com/bsm-sdk/core/types"
"git.apinb.com/bsm-sdk/core/vars" "git.apinb.com/bsm-sdk/core/vars"
@@ -12,6 +15,24 @@ var (
MigrateTables []any MigrateTables []any
) )
func NewDatabase(driver string, dsn []string, options *types.SqlOptions) (db *gorm.DB, err error) {
driver = strings.ToLower(driver)
switch driver {
case "mysql":
db, err = NewMysql(dsn, options)
case "postgres":
db, err = NewPostgres(dsn, options)
default:
return nil, fmt.Errorf("unsupported database driver: %s", driver)
}
if err != nil {
return nil, err
}
return db, nil
}
// NewMysql 创建MySQL数据库服务 // NewMysql 创建MySQL数据库服务
func NewMysql(dsn []string, options *types.SqlOptions) (gormDb *gorm.DB, err error) { func NewMysql(dsn []string, options *types.SqlOptions) (gormDb *gorm.DB, err error) {
//set connection default val. //set connection default val.

27
with/databases.go Normal file
View File

@@ -0,0 +1,27 @@
package with
import (
"git.apinb.com/bsm-sdk/core/conf"
"git.apinb.com/bsm-sdk/core/database"
"git.apinb.com/bsm-sdk/core/print"
"git.apinb.com/bsm-sdk/core/types"
"git.apinb.com/bsm-sdk/core/vars"
"gorm.io/gorm"
)
func Databases(cfg *conf.DBConf, db *gorm.DB, opts *types.SqlOptions) {
if cfg == nil || len(cfg.Source) == 0 {
panic("No Database Source Found !")
}
// print inform.
print.Info("[BSM - %s] Databases: %v", vars.ServiceKey, cfg)
var err error
db, err = database.NewDatabase(cfg.Driver, cfg.Source, opts)
if err != nil {
print.Error("Database Init Failed !")
panic(err)
}
return
}

54
with/etcd.go Normal file
View File

@@ -0,0 +1,54 @@
package with
import (
"time"
"git.apinb.com/bsm-sdk/core/conf"
"git.apinb.com/bsm-sdk/core/errcode"
"git.apinb.com/bsm-sdk/core/print"
"git.apinb.com/bsm-sdk/core/vars"
"go.etcd.io/etcd/client/pkg/v3/transport"
clientv3 "go.etcd.io/etcd/client/v3"
)
func Etcd(cfg *conf.EtcdConf, cli *clientv3.Client) {
if cfg == nil || len(cfg.Endpoints) == 0 {
return
}
etcdCfg := clientv3.Config{
Endpoints: cfg.Endpoints,
DialTimeout: 5 * time.Second,
}
if cfg.Passwd != nil {
etcdCfg.Username = cfg.Passwd.Account
etcdCfg.Password = cfg.Passwd.Password
}
if cfg.TLS != nil {
tlsInfo := transport.TLSInfo{
TrustedCAFile: cfg.TLS.CaFile,
CertFile: cfg.TLS.CertFile,
KeyFile: cfg.TLS.KeyFile,
}
tlsConfig, err := tlsInfo.ClientConfig()
if err != nil {
print.Error(errcode.ErrEtcd.Error())
panic(err)
}
etcdCfg.TLS = tlsConfig
}
var err error
cli, err = clientv3.New(etcdCfg)
if err != nil {
print.Error(errcode.ErrEtcd.Error())
panic(err)
}
// print inform.
print.Info("[BSM - %s] Service Center: %v", vars.ServiceKey, cfg.Endpoints)
return
}

35
with/memory.go Normal file
View File

@@ -0,0 +1,35 @@
package with
import (
"context"
"time"
"git.apinb.com/bsm-sdk/core/print"
"git.apinb.com/bsm-sdk/core/vars"
"github.com/allegro/bigcache/v3"
)
func Memory(cli *bigcache.BigCache, opts *bigcache.Config) {
if opts == nil {
opts = &bigcache.Config{
Shards: 1024,
LifeWindow: 10 * time.Minute,
CleanWindow: 5 * time.Minute,
MaxEntriesInWindow: 1000 * 10 * 60,
MaxEntrySize: 500,
Verbose: true,
HardMaxCacheSize: 8192,
OnRemove: nil,
OnRemoveWithReason: nil,
}
}
var err error
cli, err = bigcache.New(context.Background(), *opts)
if err != nil {
print.Error("Memory Cache Fatal Error")
panic(err)
}
print.Success("[BSM - %s] Memory Cache: Shards=%d, MaxEntrySize=%d", vars.ServiceKey, opts.Shards, opts.MaxEntrySize)
}

16
with/redis.go Normal file
View File

@@ -0,0 +1,16 @@
package with
import (
"git.apinb.com/bsm-sdk/core/cache/redis"
"git.apinb.com/bsm-sdk/core/print"
"git.apinb.com/bsm-sdk/core/vars"
)
func RedisCache(cfg string, cli *redis.RedisClient) {
if cfg != "" {
cli = redis.New(cfg, vars.ServiceKey)
// print inform.
print.Info("[BSM - %s] Cache: %s, DBIndex: %d", vars.ServiceKey, cfg, cli.DB)
}
}