优化 local 模式兼容性与部署可靠性

- SQL 方言层:agent updated_at、dashboard 小时分桶、清理任务跨 SQLite/MySQL
- Cache Capabilities:redka 跳过 ZSet/PubSub,Agent 聚合改 DB 直读
- local 模式 redka 初始化失败 Fatal;/version 返回 features
- SQLite WAL + 连接池限制;K8s data 改 PVC 持久化
- run.sh:旧参数迁移、升级后 /version 校验
This commit is contained in:
Logan.Li committed 2026-06-26 13:28:31 +08:00
1 parent 1f4f63cf6e
commit b7166acda4
13 files changed
+374 -152

No files matched your search

+4
View File
@@ -33,6 +33,10 @@ func newGoRedis(cfg Config) (Cache, error) {
return &goRedisCache{client: client}, nil
}
func (r *goRedisCache) Capabilities() Capabilities {
return Capabilities{SortedSet: true, PubSub: true}
}
func (r *goRedisCache) Get(ctx context.Context, key string) (string, error) {
val, err := r.client.Get(ctx, key).Result()
if err == goredis.Nil {
+7
View File
@@ -40,8 +40,15 @@ type SortedSetMember struct {
Member string
}
// Capabilities 缓存后端能力(local/redka 与外部 Redis 差异)// Logan.Li
type Capabilities struct {
SortedSet bool `json:"sorted_set"`
PubSub bool `json:"pubsub"`
}
// Cache Redis 缓存接口 // Logan.Li
type Cache interface {
Capabilities() Capabilities
Get(ctx context.Context, key string) (string, error)
Set(ctx context.Context, key string, value string, expiration time.Duration) error
Del(ctx context.Context, keys ...string) error
+6 -1
View File
@@ -31,6 +31,10 @@ func newRedka(cfg Config) (Cache, error) {
return &redkaCache{db: db}, nil
}
func (r *redkaCache) Capabilities() Capabilities {
return Capabilities{SortedSet: false, PubSub: false}
}
func (r *redkaCache) Get(ctx context.Context, key string) (string, error) {
// Redka v0.2.x: Str().Get() 返回 core.Value // Logan.Li
val, err := r.db.Str().Get(key)
@@ -115,5 +119,6 @@ func (r *redkaCache) ZRemRangeByScore(ctx context.Context, key string, min, max
var errPubSubNotSupported = fmt.Errorf("Pub/Sub is not supported by the redka backend; use go-redis (driver=redis)")
func (r *redkaCache) Publish(ctx context.Context, channel string, message string) error {
return errPubSubNotSupported
// local/redka 无 Pub/Sub,流水线日志走轮询 Get,此处 no-op // Logan.Li
return nil
}