English | 🇨🇳中文
一个用于缓存http接口内容的gin高性能中间件。相比于官方的gin-contrib/cache,gin-cache有巨大的性能提升。
- 相比于gin-contrib/cache,性能提升巨大。
- 同时支持本机内存和redis作为缓存后端。
- 支持用户根据请求来指定cache策略。
- 使用singleflight解决了缓存击穿问题。
- 仅缓存http状态码为2xx的回包
go get -u github.com/chenyahui/gin-cache
package main
import (
"time"
"github.com/chenyahui/gin-cache"
"github.com/chenyahui/gin-cache/persist"
"github.com/gin-gonic/gin"
)
func main() {
app := gin.New()
memoryStore := persist.NewMemoryStore(1 * time.Minute)
app.GET("/hello",
cache.CacheByRequestURI(memoryStore, 2*time.Second),
func(c *gin.Context) {
c.String(200, "hello world")
},
)
if err := app.Run(":8080"); err != nil {
panic(err)
}
}
package main
import (
"time"
"github.com/chenyahui/gin-cache"
"github.com/chenyahui/gin-cache/persist"
"github.com/gin-gonic/gin"
"github.com/go-redis/redis/v8"
)
func main() {
app := gin.New()
redisStore := persist.NewRedisStore(redis.NewClient(&redis.Options{
Network: "tcp",
Addr: "127.0.0.1:6379",
}))
app.GET("/hello",
cache.CacheByRequestURI(redisStore, 2*time.Second),
func(c *gin.Context) {
c.String(200, "hello world")
},
)
if err := app.Run(":8080"); err != nil {
panic(err)
}
}
wrk -c 500 -d 1m -t 5 http://127.0.0.1:8080/hello