fix(数据): 修复删除数据过多而造成的redis连接超时问题
部署开发环境 / deploy-dev (push) Successful in 2m57s

This commit is contained in:
2026-05-28 21:16:43 +08:00
parent cd061668f9
commit 1aef5775a6
+36 -12
View File
@@ -171,12 +171,24 @@ func DeleteTokenInfoHandler(c *gin.Context) {
global.RDB.Del(global.RCtx, keys...)
global.RDB.Del(global.RCtx, "delete-list:"+input.Token)
default:
i, err := strconv.Atoi(input.DedupBF)
num, err := strconv.Atoi(input.DedupBF)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "dedup_bf设置错误 " + err.Error()})
c.JSON(http.StatusBadRequest, gin.H{"error": "dedup_bf数量设置错误 " + err.Error()})
return
}
result := global.RDB.LRange(global.RCtx, "delete-list:"+input.Token, int64(-i), -1).Val()
for i := num; i > 0; i -= 20_0000 {
a := 0
if i > 20_0000 {
a = 20_0000
} else {
a = i
}
//获得要删的值(列表)
result := global.RDB.LRange(global.RCtx, "delete-list:"+input.Token, int64(-a), -1).Val()
//用事件批量删除布隆过滤器中值
_, err = global.RDB.TxPipelined(global.RCtx, func(pipe redis.Pipeliner) error {
for _, s := range result {
pipe.CFDel(global.RCtx, "dedup:"+input.Token+":"+dedupObject, s)
@@ -187,7 +199,10 @@ func DeleteTokenInfoHandler(c *gin.Context) {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
global.RDB.LTrim(global.RCtx, "delete-list:"+input.Token, 0, int64(-i-1))
//清除列表中要删的值
global.RDB.LTrim(global.RCtx, "delete-list:"+input.Token, 0, int64(-a-1))
}
}
//删除原始数据
@@ -196,32 +211,40 @@ func DeleteTokenInfoHandler(c *gin.Context) {
case "all":
global.RDB.Del(global.RCtx, "list:"+input.Token)
default:
i, err := strconv.Atoi(input.CacheList)
num, err := strconv.Atoi(input.CacheList)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "cache_list设置错误 " + err.Error()})
c.JSON(http.StatusBadRequest, gin.H{"error": "cache_list数量设置错误 " + err.Error()})
return
}
global.RDB.LTrim(global.RCtx, "list:"+input.Token, 0, int64(-i-1))
global.RDB.LTrim(global.RCtx, "list:"+input.Token, 0, int64(-num-1))
}
//删除去重参考值和原始数据
switch input.BothNumber {
case "":
default:
i, err := strconv.Atoi(input.BothNumber)
num, err := strconv.Atoi(input.BothNumber)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "both_number设置错误 " + err.Error()})
c.JSON(http.StatusBadRequest, gin.H{"error": "both_number数量设置错误 " + err.Error()})
return
}
result := global.RDB.LRange(global.RCtx, "delete-list:"+input.Token, int64(-i), -1).Val()
for i := num; i > 0; i -= 20_0000 {
a := 0
if i > 20_0000 {
a = 20_0000
} else {
a = i
}
result := global.RDB.LRange(global.RCtx, "delete-list:"+input.Token, int64(-a), -1).Val()
_, err = global.RDB.TxPipelined(global.RCtx, func(pipe redis.Pipeliner) error {
for _, s := range result {
pipe.CFDel(global.RCtx, "dedup:"+input.Token+":"+dedupObject, s)
}
pipe.LTrim(global.RCtx, "delete-list:"+input.Token, 0, int64(-i-1))
pipe.LTrim(global.RCtx, "list:"+input.Token, 0, int64(-i-1))
pipe.LTrim(global.RCtx, "delete-list:"+input.Token, 0, int64(-a-1))
pipe.LTrim(global.RCtx, "list:"+input.Token, 0, int64(-a-1))
return nil
})
if err != nil {
@@ -229,6 +252,7 @@ func DeleteTokenInfoHandler(c *gin.Context) {
return
}
}
}
//输出信息
c.JSON(http.StatusOK, gin.H{"result": "ok"})