feat(backend): 限流/登录失败锁状态外置 Redis(todo #2)
新包 internal/ratelimit:内存/redis(GCRA+Lua) 双实现 + 出错逐调用降级内存 (fail-open 到内存不 fail-closed)。REDIS_ADDR 空=内存模式,行为与既往一致; 配置后跨重启保状态、支持多实例。miniredis 全覆盖测试,零真实外部依赖。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -11,6 +11,7 @@ import (
|
||||
|
||||
"github.com/wangjia/jiu/backend/config"
|
||||
"github.com/wangjia/jiu/backend/internal/model"
|
||||
"github.com/wangjia/jiu/backend/internal/ratelimit"
|
||||
"github.com/wangjia/jiu/backend/internal/router"
|
||||
"github.com/wangjia/jiu/backend/internal/service"
|
||||
"github.com/wangjia/jiu/backend/internal/util"
|
||||
@@ -20,6 +21,10 @@ func main() {
|
||||
// 加载配置
|
||||
config.Load()
|
||||
|
||||
// 限流/登录锁状态存储:REDIS_ADDR 配置后外置 redis(跨重启保状态),
|
||||
// 未配置或连不上时落内存(与既往行为一致)。须在 router.Setup 之前。
|
||||
ratelimit.Init(config.C.Redis.Addr)
|
||||
|
||||
// 生产环境启动前置检查
|
||||
if config.C.Server.Mode == "release" {
|
||||
if config.C.Server.CORSOrigin == "*" {
|
||||
|
||||
Reference in New Issue
Block a user