From 501003f1ad223ff7cc5b15f30f4ec626c3093559 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Sun, 27 Aug 2023 14:49:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=BF=87=E6=97=B6=E7=BC=93?= =?UTF-8?q?=E5=AD=98=E6=97=B6=E9=95=BF=EF=BC=88=E4=BB=8E600=E7=A7=92?= =?UTF-8?q?=E6=94=B9=E4=B8=BA1200=E7=A7=92=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/caches/list_file_db.go | 11 ++++------- internal/caches/storage_file.go | 1 + internal/nodes/http_writer.go | 2 +- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/internal/caches/list_file_db.go b/internal/caches/list_file_db.go index dcc919a..dc0cde7 100644 --- a/internal/caches/list_file_db.go +++ b/internal/caches/list_file_db.go @@ -367,10 +367,9 @@ func (this *FileListDB) CleanPrefix(prefix string) error { return nil } var count = int64(10000) - var staleLife = 600 // TODO 需要可以设置 var unixTime = fasttime.Now().Unix() // 只删除当前的,不删除新的 for { - result, err := this.writeDB.Exec(`UPDATE "`+this.itemsTableName+`" SET expiredAt=0,staleAt=? WHERE id IN (SELECT id FROM "`+this.itemsTableName+`" WHERE expiredAt>0 AND createdAt<=? AND INSTR("key", ?)=1 LIMIT `+types.String(count)+`)`, unixTime+int64(staleLife), unixTime, prefix) + result, err := this.writeDB.Exec(`UPDATE "`+this.itemsTableName+`" SET expiredAt=0,staleAt=? WHERE id IN (SELECT id FROM "`+this.itemsTableName+`" WHERE expiredAt>0 AND createdAt<=? AND INSTR("key", ?)=1 LIMIT `+types.String(count)+`)`, unixTime+DefaultStaleCacheSeconds, unixTime, prefix) if err != nil { return this.WrapError(err) } @@ -414,15 +413,14 @@ func (this *FileListDB) CleanMatchKey(key string) error { queryKey = strings.Replace(queryKey, "*", "%", 1) // TODO 检查大批量数据下的操作性能 - var staleLife = 600 // TODO 需要可以设置 var unixTime = fasttime.Now().Unix() // 只删除当前的,不删除新的 - _, err = this.writeDB.Exec(`UPDATE "`+this.itemsTableName+`" SET "expiredAt"=0, "staleAt"=? WHERE "host" GLOB ? AND "host" NOT GLOB ? AND "key" LIKE ? ESCAPE '\'`, unixTime+int64(staleLife), host, "*."+host, queryKey) + _, err = this.writeDB.Exec(`UPDATE "`+this.itemsTableName+`" SET "expiredAt"=0, "staleAt"=? WHERE "host" GLOB ? AND "host" NOT GLOB ? AND "key" LIKE ? ESCAPE '\'`, unixTime+DefaultStaleCacheSeconds, host, "*."+host, queryKey) if err != nil { return err } - _, err = this.writeDB.Exec(`UPDATE "`+this.itemsTableName+`" SET "expiredAt"=0, "staleAt"=? WHERE "host" GLOB ? AND "host" NOT GLOB ? AND "key" LIKE ? ESCAPE '\'`, unixTime+int64(staleLife), host, "*."+host, queryKey+SuffixAll+"%") + _, err = this.writeDB.Exec(`UPDATE "`+this.itemsTableName+`" SET "expiredAt"=0, "staleAt"=? WHERE "host" GLOB ? AND "host" NOT GLOB ? AND "key" LIKE ? ESCAPE '\'`, unixTime+DefaultStaleCacheSeconds, host, "*."+host, queryKey+SuffixAll+"%") if err != nil { return err } @@ -456,10 +454,9 @@ func (this *FileListDB) CleanMatchPrefix(prefix string) error { queryPrefix += "%" // TODO 检查大批量数据下的操作性能 - var staleLife = 600 // TODO 需要可以设置 var unixTime = fasttime.Now().Unix() // 只删除当前的,不删除新的 - _, err = this.writeDB.Exec(`UPDATE "`+this.itemsTableName+`" SET "expiredAt"=0, "staleAt"=? WHERE "host" GLOB ? AND "host" NOT GLOB ? AND "key" LIKE ? ESCAPE '\'`, unixTime+int64(staleLife), host, "*."+host, queryPrefix) + _, err = this.writeDB.Exec(`UPDATE "`+this.itemsTableName+`" SET "expiredAt"=0, "staleAt"=? WHERE "host" GLOB ? AND "host" NOT GLOB ? AND "key" LIKE ? ESCAPE '\'`, unixTime+DefaultStaleCacheSeconds, host, "*."+host, queryPrefix) return err } diff --git a/internal/caches/storage_file.go b/internal/caches/storage_file.go index 0b27159..88cba21 100644 --- a/internal/caches/storage_file.go +++ b/internal/caches/storage_file.go @@ -58,6 +58,7 @@ const ( FileToMemoryMaxSize = 32 * sizes.M // 可以从文件写入到内存的最大文件尺寸 FileTmpSuffix = ".tmp" DefaultMinDiskFreeSpace uint64 = 5 << 30 // 当前磁盘最小剩余空间 + DefaultStaleCacheSeconds = 1200 // 过时缓存留存时间 ) var sharedWritingFileKeyMap = map[string]zero.Zero{} // key => bool diff --git a/internal/nodes/http_writer.go b/internal/nodes/http_writer.go index 740b5be..17fd0ab 100644 --- a/internal/nodes/http_writer.go +++ b/internal/nodes/http_writer.go @@ -982,7 +982,7 @@ func (this *HTTPWriter) DelayRead() bool { // 计算stale时长 func (this *HTTPWriter) calculateStaleLife() int { - var staleLife = 600 // TODO 可以在缓存策略里设置此时间 + var staleLife = caches.DefaultStaleCacheSeconds var staleConfig = this.req.web.Cache.Stale if staleConfig != nil && staleConfig.IsOn { // 从Header中读取stale-if-error