refactor(redis): streamline JS exports, add singleton with Logger from context
- Remove redundant per-command JS shortcuts, unified under Do() - Remove unused PascalCase instance methods - Add getDefaultRedisForJS singleton that extracts log.Logger from Context - Add MakeID export for JS-side distributed ID generation Co-Authored-By: deepseek-v4-pro[1m] <deepseek-ai@claude-code-best.win>
This commit is contained in:
parent
8761a5a8ac
commit
f5ba9b2f97
16
CHANGELOG.md
16
CHANGELOG.md
@ -1,5 +1,21 @@
|
||||
# CHANGELOG - redis
|
||||
|
||||
## v1.5.5 (2026-06-20)
|
||||
- **JS 导出重构**:
|
||||
- 移除 `js_export.go` 中冗余的独立命令快捷函数(SET, GET, DEL, EXISTS, EXPIRE, PUBLISH),统一通过 `Do` 方法调用。
|
||||
- 移除未使用的 PascalCase 实例方法(SET, GET, DEL, EXISTS, EXPIRE, HSET, HGET, PUBLISH),精简 API 面积。
|
||||
- 新增 `getDefaultRedisForJS` 单例模式,从 Context 中提取 `log.Logger` 传入 `GetRedis`,确保 JS 端 Redis 操作具备完整日志追踪能力。
|
||||
- 新增 `MakeID` 函数,为 JS 端暴露分布式 ID 生成能力。
|
||||
|
||||
## v1.5.4 (2026-06-19)
|
||||
- **基础设施对齐**: 内部依赖统一升级至 v1.5.x 语义版本。
|
||||
|
||||
## v1.5.3 (2026-06-18)
|
||||
- **JS 导出增强**: 对齐 PascalCase 命名规范,扁平化 default 实例的 JS 导出。
|
||||
|
||||
## v1.5.2 (2026-06-17)
|
||||
- **依赖修复**: 对齐 `encoding` v1.5.2 接口变更。
|
||||
|
||||
## v1.5.1 (2026-06-08)
|
||||
- **新增**: `SetConfig(name, setting string)` 方法,支持动态配置 Redis 连接(不依赖配置文件),方便通过别名获取连接。
|
||||
- **优化**: 重构配置加载逻辑,确保动态配置与配置文件配置的共存与优先级。
|
||||
|
||||
58
js_export.go
58
js_export.go
@ -7,6 +7,7 @@ import (
|
||||
|
||||
"apigo.cc/go/id"
|
||||
"apigo.cc/go/jsmod"
|
||||
"apigo.cc/go/log"
|
||||
)
|
||||
|
||||
func init() {
|
||||
@ -26,7 +27,7 @@ func init() {
|
||||
|
||||
// 默认快捷调用 (面向 "default" 实例)
|
||||
"Do": func(ctx context.Context, cmd string, args ...any) (*Result, error) {
|
||||
jr := &jsRedis{rd: GetRedis("default", nil), ctx: ctx}
|
||||
jr := getDefaultRedisForJS(ctx)
|
||||
if jr.rd.Error != nil {
|
||||
return nil, jr.rd.Error
|
||||
}
|
||||
@ -34,36 +35,12 @@ func init() {
|
||||
return res, res.Error
|
||||
},
|
||||
|
||||
// 常用命令平铺 (面向 "default" 实例)
|
||||
"SET": func(ctx context.Context, key string, val any) (*Result, error) {
|
||||
jr := &jsRedis{rd: GetRedis("default", nil), ctx: ctx}
|
||||
res := jr.Do("SET", key, val)
|
||||
return res, res.Error
|
||||
},
|
||||
"GET": func(ctx context.Context, key string) (*Result, error) {
|
||||
jr := &jsRedis{rd: GetRedis("default", nil), ctx: ctx}
|
||||
res := jr.Do("GET", key)
|
||||
return res, res.Error
|
||||
},
|
||||
"DEL": func(ctx context.Context, key string) (*Result, error) {
|
||||
jr := &jsRedis{rd: GetRedis("default", nil), ctx: ctx}
|
||||
res := jr.Do("DEL", key)
|
||||
return res, res.Error
|
||||
},
|
||||
"EXISTS": func(ctx context.Context, key string) (*Result, error) {
|
||||
jr := &jsRedis{rd: GetRedis("default", nil), ctx: ctx}
|
||||
res := jr.Do("EXISTS", key)
|
||||
return res, res.Error
|
||||
},
|
||||
"EXPIRE": func(ctx context.Context, key string, seconds int) (*Result, error) {
|
||||
jr := &jsRedis{rd: GetRedis("default", nil), ctx: ctx}
|
||||
res := jr.Do("EXPIRE", key, seconds)
|
||||
return res, res.Error
|
||||
},
|
||||
"PUBLISH": func(ctx context.Context, channel, data string) (*Result, error) {
|
||||
jr := &jsRedis{rd: GetRedis("default", nil), ctx: ctx}
|
||||
res := jr.Do("PUBLISH", channel, data)
|
||||
return res, res.Error
|
||||
"MakeID": func(ctx context.Context, size int, forDB *string) string {
|
||||
jr := getDefaultRedisForJS(ctx)
|
||||
if jr.rd.Error != nil {
|
||||
return id.MakeID(size)
|
||||
}
|
||||
return jr.MakeID(size, forDB)
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -74,6 +51,15 @@ type jsRedis struct {
|
||||
idMaker *id.IDMaker
|
||||
}
|
||||
|
||||
var defaultRedisForJS *jsRedis
|
||||
|
||||
func getDefaultRedisForJS(ctx context.Context) *jsRedis {
|
||||
if defaultRedisForJS == nil {
|
||||
defaultRedisForJS = &jsRedis{rd: GetRedis("default", ctx.Value("Logger").(*log.Logger)), ctx: ctx}
|
||||
}
|
||||
return defaultRedisForJS
|
||||
}
|
||||
|
||||
var errSafeMode = errors.New("redis operation is restricted in safe mode")
|
||||
|
||||
// 核心写操作指令集
|
||||
@ -105,16 +91,6 @@ func (jr *jsRedis) Do(cmd string, args ...any) *Result {
|
||||
return jr.rd.Do(cmd, args...)
|
||||
}
|
||||
|
||||
// 实例方法 PascalCase 对齐
|
||||
func (jr *jsRedis) SET(key string, val any) *Result { return jr.Do("SET", key, val) }
|
||||
func (jr *jsRedis) GET(key string) *Result { return jr.Do("GET", key) }
|
||||
func (jr *jsRedis) DEL(key string) *Result { return jr.Do("DEL", key) }
|
||||
func (jr *jsRedis) EXISTS(key string) *Result { return jr.Do("EXISTS", key) }
|
||||
func (jr *jsRedis) EXPIRE(key string, s int) *Result { return jr.Do("EXPIRE", key, s) }
|
||||
func (jr *jsRedis) HSET(key, field string, v any) *Result { return jr.Do("HSET", key, field, v) }
|
||||
func (jr *jsRedis) HGET(key, field string) *Result { return jr.Do("HGET", key, field) }
|
||||
func (jr *jsRedis) PUBLISH(ch, data string) *Result { return jr.Do("PUBLISH", ch, data) }
|
||||
|
||||
// ID Generation
|
||||
func (jr *jsRedis) MakeID(size int, forDB *string) string {
|
||||
if jr.idMaker == nil {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user