Compare commits

..

No commits in common. "main" and "v1.5.8" have entirely different histories.
main ... v1.5.8

5 changed files with 6 additions and 16 deletions

View File

@ -1,13 +1,5 @@
# CHANGELOG - redis # CHANGELOG - redis
## v1.5.10 (2026-06-22)
- **依赖更新**:
- 升级依赖 `id``v1.5.6`
## v1.5.9 (2026-06-21)
- **依赖更新**:
- 升级依赖 `id``v1.5.5`(同步修复旧版本 ID 未打乱的 Bug
## v1.5.8 (2026-06-21) ## v1.5.8 (2026-06-21)
- **安全模式优化**: `checkSafe` 从写命令全量拦截改为仅拦截危险命令(`FLUSHDB`/`FLUSHALL`常规写操作HSET/HDEL/SET/DEL 等)在安全模式下不再受限。 - **安全模式优化**: `checkSafe` 从写命令全量拦截改为仅拦截危险命令(`FLUSHDB`/`FLUSHALL`常规写操作HSET/HDEL/SET/DEL 等)在安全模式下不再受限。
- **Result.Bool() 修复**: 增加 `"OK"` 响应判断Redis RESP Simple String解决 SET/SETEX 等命令永远返回 `false` 的问题。 - **Result.Bool() 修复**: 增加 `"OK"` 响应判断Redis RESP Simple String解决 SET/SETEX 等命令永远返回 `false` 的问题。

View File

@ -13,12 +13,12 @@
- Fixed `Start()` and `Stop()` logic to prevent redundant goroutines and ensure clean exit. - Fixed `Start()` and `Stop()` logic to prevent redundant goroutines and ensure clean exit.
## Benchmarks ## Benchmarks
- **BenchmarkGetSet**: **282,638 ns/op** (Simple GET/SET loop) - **BenchmarkGetSet**: ~80,000 ns/op (Simple GET/SET loop)
- **BenchmarkIDMaker**: **2,672 ns/op** (High-performance sequence generation) - **BenchmarkIDMaker**: ~2,300 ns/op (High-performance sequence generation)
## 🛡️ 鲁棒性防御 (Robustness) ## 🛡️ 鲁棒性防御 (Robustness)
- **安全沙箱拦截**:在 `SafeMode`拦截危险命令FLUSHDB/FLUSHALL常规写操作HSET/HDEL/SET/DEL 等)可正常执行。 - **安全沙箱拦截**:在 `SafeMode`拦截危险命令FLUSHDB/FLUSHALL常规写操作HSET/HDEL/SET/DEL 等)可正常执行。
- **JS 错误调用栈**JS 桥接层改用具名导出并使用 `jsmod.MakeError` 包裹错误(包括 Do 返回的 Result.Error 字段),确保 JS 抛出异常时携带准确的 Go 运行时堆栈。 - **JS 错误调用栈**JS 桥接层改用具名导出并使用 `jsmod.MakeError` 包裹错误(包括 Do 返回的 Result.Error 字段),确保 JS 抛出异常时携带准确的 Go 运行时堆栈。
> Date: 2026-06-22 > Date: 2026-06-21
> Environment: Darwin / Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz > Environment: Darwin / Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz

2
go.mod
View File

@ -7,7 +7,7 @@ require (
apigo.cc/go/config v1.5.3 apigo.cc/go/config v1.5.3
apigo.cc/go/crypto v1.5.3 apigo.cc/go/crypto v1.5.3
apigo.cc/go/encoding v1.5.4 apigo.cc/go/encoding v1.5.4
apigo.cc/go/id v1.5.6 apigo.cc/go/id v1.5.4
apigo.cc/go/jsmod v1.5.3 apigo.cc/go/jsmod v1.5.3
apigo.cc/go/log v1.5.8 apigo.cc/go/log v1.5.8
apigo.cc/go/safe v1.5.2 apigo.cc/go/safe v1.5.2

4
go.sum
View File

@ -8,8 +8,8 @@ apigo.cc/go/encoding v1.5.4 h1:Fk8TrveZATyy8SHukC4ZiqdTSp+QIfsRHtt55xmMK7w=
apigo.cc/go/encoding v1.5.4/go.mod h1:dShEsZ3gKqBINz7TSOYf4e7/fBCqCY9VzlenoGUQUFM= apigo.cc/go/encoding v1.5.4/go.mod h1:dShEsZ3gKqBINz7TSOYf4e7/fBCqCY9VzlenoGUQUFM=
apigo.cc/go/file v1.5.5 h1:/+HmDumLu6Qk2KuQL63M9lpgzHTDL+QJ8dStOl7e9gs= apigo.cc/go/file v1.5.5 h1:/+HmDumLu6Qk2KuQL63M9lpgzHTDL+QJ8dStOl7e9gs=
apigo.cc/go/file v1.5.5/go.mod h1:xRVNhctvqOKeBemmcRW/BQfgkc3B+vT/UZVdSc7duUo= apigo.cc/go/file v1.5.5/go.mod h1:xRVNhctvqOKeBemmcRW/BQfgkc3B+vT/UZVdSc7duUo=
apigo.cc/go/id v1.5.5 h1:fQXfb2WZ4hEtzXkpb9w9o8AOcTZ44fYQfTV6iZ49l8o= apigo.cc/go/id v1.5.4 h1:D1Zx9gEZhOgdTgZ4SdmPImhpc9xGiOA33Y+j2MkstzQ=
apigo.cc/go/id v1.5.5/go.mod h1:hCTQq+KC1ALWe1FpPERf+W4B6FSulg9FAgOUJDDySiY= apigo.cc/go/id v1.5.4/go.mod h1:hCTQq+KC1ALWe1FpPERf+W4B6FSulg9FAgOUJDDySiY=
apigo.cc/go/jsmod v1.5.3 h1:S3W317bH0QV2NMeRO1E0v6ySIBOfMWYv/NuQJbvqKWU= apigo.cc/go/jsmod v1.5.3 h1:S3W317bH0QV2NMeRO1E0v6ySIBOfMWYv/NuQJbvqKWU=
apigo.cc/go/jsmod v1.5.3/go.mod h1:bmyeZtOAP/j5am+YRnaiM89smysK24K7ebk0koFtsSw= apigo.cc/go/jsmod v1.5.3/go.mod h1:bmyeZtOAP/j5am+YRnaiM89smysK24K7ebk0koFtsSw=
apigo.cc/go/log v1.5.8 h1:/IYtGPWhRjT3OayylDIphkWZIQbpLjqVeSnFEiD3Dy0= apigo.cc/go/log v1.5.8 h1:/IYtGPWhRjT3OayylDIphkWZIQbpLjqVeSnFEiD3Dy0=

View File

@ -19,7 +19,6 @@ func TestSub(t *testing.T) {
rd.Subscribe("aaa", nil, func(s []byte) { rd.Subscribe("aaa", nil, func(s []byte) {
aaa.Store(string(s)) aaa.Store(string(s))
}) })
time.Sleep(50 * time.Millisecond) // 等待 Redis 订阅注册完成
rd.PUBLISH("aaa", "111") rd.PUBLISH("aaa", "111")
time.Sleep(100 * time.Millisecond) time.Sleep(100 * time.Millisecond)
@ -32,7 +31,6 @@ func TestSub(t *testing.T) {
rd.Subscribe("bbb", nil, func(s []byte) { rd.Subscribe("bbb", nil, func(s []byte) {
bbb.Store(string(s)) bbb.Store(string(s))
}) })
time.Sleep(50 * time.Millisecond) // 等待 Redis 订阅注册完成
rd.PUBLISH("bbb", "222") rd.PUBLISH("bbb", "222")
time.Sleep(100 * time.Millisecond) time.Sleep(100 * time.Millisecond)