Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
陈曦
sub2api
Commits
491a7444
Commit
491a7444
authored
Mar 06, 2026
by
shaw
Browse files
fix: 修复账号列表首次加载窗口费用显示 $0.00
lite 模式下从快照缓存读取窗口费用,非 lite 模式查询后写入缓存
parent
63a8c769
Changes
2
Show whitespace changes
Inline
Side-by-side
backend/internal/handler/admin/account_handler.go
View file @
491a7444
...
...
@@ -288,8 +288,19 @@ func (h *AccountHandler) List(c *gin.Context) {
}
}
// 仅非 lite 模式获取窗口费用(PostgreSQL 聚合查询,高开销)
if
!
lite
&&
len
(
windowCostAccountIDs
)
>
0
{
// 窗口费用获取:lite 模式从快照缓存读取,非 lite 模式执行 PostgreSQL 查询后写入缓存
if
len
(
windowCostAccountIDs
)
>
0
{
if
lite
{
// lite 模式:尝试从快照缓存读取
cacheKey
:=
buildWindowCostCacheKey
(
windowCostAccountIDs
)
if
cached
,
ok
:=
accountWindowCostCache
.
Get
(
cacheKey
);
ok
{
if
costs
,
ok
:=
cached
.
Payload
.
(
map
[
int64
]
float64
);
ok
{
windowCosts
=
costs
}
}
// 缓存未命中则 windowCosts 保持 nil(仅发生在服务刚启动时)
}
else
{
// 非 lite 模式:执行 PostgreSQL 聚合查询(高开销)
windowCosts
=
make
(
map
[
int64
]
float64
)
var
mu
sync
.
Mutex
g
,
gctx
:=
errgroup
.
WithContext
(
c
.
Request
.
Context
())
...
...
@@ -314,6 +325,11 @@ func (h *AccountHandler) List(c *gin.Context) {
})
}
_
=
g
.
Wait
()
// 查询完毕后写入快照缓存,供 lite 模式使用
cacheKey
:=
buildWindowCostCacheKey
(
windowCostAccountIDs
)
accountWindowCostCache
.
Set
(
cacheKey
,
windowCosts
)
}
}
// Build response with concurrency info
...
...
backend/internal/handler/admin/account_window_cost_cache.go
0 → 100644
View file @
491a7444
package
admin
import
(
"strconv"
"strings"
"time"
)
var
accountWindowCostCache
=
newSnapshotCache
(
30
*
time
.
Second
)
func
buildWindowCostCacheKey
(
accountIDs
[]
int64
)
string
{
if
len
(
accountIDs
)
==
0
{
return
"accounts_window_cost_empty"
}
var
b
strings
.
Builder
b
.
Grow
(
len
(
accountIDs
)
*
6
)
_
,
_
=
b
.
WriteString
(
"accounts_window_cost:"
)
for
i
,
id
:=
range
accountIDs
{
if
i
>
0
{
_
=
b
.
WriteByte
(
','
)
}
_
,
_
=
b
.
WriteString
(
strconv
.
FormatInt
(
id
,
10
))
}
return
b
.
String
()
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment