From 1e7dc01b228b9e15725de8a7906878690caaa0fd Mon Sep 17 00:00:00 2001 From: eafonyang Date: Tue, 16 Jun 2026 17:21:31 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=99=E9=AB=98=E9=A2=91=E8=B0=83=E7=94=A8?= =?UTF-8?q?=E7=9A=84=E8=B7=AF=E7=94=B1=E5=8A=A0=E4=B8=8A=20cache-control?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yml | 2 +- internal/middleware/cache_control.go | 18 ++++++++++++++++++ internal/router/router.go | 10 +++++----- 3 files changed, 24 insertions(+), 6 deletions(-) create mode 100644 internal/middleware/cache_control.go diff --git a/docker-compose.yml b/docker-compose.yml index 4680c9e..933ef8a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,7 +14,7 @@ services: - DATABASE_PASSWORD=${DATABASE_PASSWORD} - REDIS_PASSWORD=${REDIS_PASSWORD:-eafon123!} - MEILISEARCH_API_KEY=${MEILISEARCH_API_KEY:-young9#!UJsD219921031} - - ENABLE_PERSIST_TASK=true + - ENABLE_PERSIST_TASK=false - AWS_REGION=eu-central-1 - S3_BUCKET=luxsin-app-bucket - SHARE_CODE_MAX_PER_MAC=${SHARE_CODE_MAX_PER_MAC:-1} diff --git a/internal/middleware/cache_control.go b/internal/middleware/cache_control.go new file mode 100644 index 0000000..c5e0bcb --- /dev/null +++ b/internal/middleware/cache_control.go @@ -0,0 +1,18 @@ +package middleware + +import "github.com/gin-gonic/gin" + +const ( + CacheControlList = "public, max-age=300, s-maxage=1800, stale-while-revalidate=60" + CacheControlCurve = "public, max-age=300, s-maxage=3600, stale-while-revalidate=120" + CacheControlModelList = "public, max-age=30, s-maxage=300, stale-while-revalidate=30" +) + +func CacheControl(value string) gin.HandlerFunc { + return func(c *gin.Context) { + c.Header("Cache-Control", value) + c.Header("Vary", "Accept-Encoding") + c.Next() + } +} + diff --git a/internal/router/router.go b/internal/router/router.go index 73aebf6..a8e06c1 100644 --- a/internal/router/router.go +++ b/internal/router/router.go @@ -62,13 +62,13 @@ func New(log *zap.Logger, db *sql.DB, searchClient *search.Client, rdb *redis.Cl audio := r.Group("/audio") { - audio.GET("/getBrand", brand.GetBrand) - audio.GET("/getModel", model.GetModel) - audio.GET("/modelList", modelList.ModelList) + audio.GET("/getBrand", middleware.CacheControl(middleware.CacheControlList), brand.GetBrand) + audio.GET("/getModel", middleware.CacheControl(middleware.CacheControlList), model.GetModel) + audio.GET("/modelList", middleware.CacheControl(middleware.CacheControlModelList), modelList.ModelList) audio.GET("/reportDevInfo", device.ReportDevInfo) audio.GET("/ota", ota.GetOTA) - audio.GET("/getCurve", curve.GetCurve) - audio.GET("/modelCurve", curve.ModelCurve) + audio.GET("/getCurve", middleware.CacheControl(middleware.CacheControlCurve), curve.GetCurve) + audio.GET("/modelCurve", middleware.CacheControl(middleware.CacheControlCurve), curve.ModelCurve) audio.GET("/getModelCSV", modelCSV.GetModelCSV) audio.POST("/shareCreate", shareCode.ExportShareCode) audio.GET("/shareList", shareCode.ListShareCodesByMac)