用於快取http介面內容的gin高效能中介軟體

Polaris發表於2022-09-09

花了2天時間寫了一個用於快取http介面內容的gin高效能中介軟體,感覺應該很實用

Github傳送門

  • 得益於簡單singleflight解決快取擊穿問題,優於官方 gin-contrib/cache
  • 支援redis(適合叢集)及memory(適合單機)驅動
  • 支援自定key(預設route) 及引數k(預設requestPath)
  • 使用hash資料結構來解決同個介面的資料組批次維護的問題
  • 使用過期時間加刪除快取策略(不覆蓋)
  • mode引數可選擇快取http狀態碼為2xx的回包

Quick start

go get github.com/janartist/api-cache
package main

import (
    apicache "github.com/janartist/api-cache"
    "github.com/gin-gonic/gin"
    "net/http/httptest"
    "github.com/janartist/api-cache/store"
    "testing"
)
func main()  {
    m := apicache.NewDefault(&store.RedisConf{
        Addr: "127.0.0.1:6379",
        Auth: "",
        DB:   0,
    })
    route(m)
}
func route(m *apicache.CacheManager) {
    app := gin.Default()
    app.GET("/test-cache-second", apicache.CacheFunc(m, apicache.Ttl(time.Second), apicache.Single(true)), func(c *gin.Context) {
        time.Sleep(time.Second)
        fmt.Print("[/test-cache-second] DB select ...\n")
        c.String(200, "test-cache-second-res")
    })
    if err := app.Run(":8080"); err != nil {
        panic(err)
    }
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章