缓存
为 Fiber 设计的缓存中间件,用于拦截响应并对其进行缓存。此中间件将使用 c.Path()
作为唯一标识符来缓存 Body
、Content-Type
和 StatusCode
。特别感谢 @codemicro 为 Fiber 核心创建此中间件!
请求指令
Cache-Control: no-cache
将返回最新的响应,但仍会缓存它。您始终会收到 miss
缓存状态。
Cache-Control: no-store
将避免缓存。您始终会收到最新的响应。
签名
func New(config ...Config) fiber.Handler
示例
导入 Fiber Web 框架中包含的中间件包
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/cache"
)
在启动 Fiber 应用后,您可以使用以下可能性
// Initialize default config
app.Use(cache.New())
// Or extend your config for customization
app.Use(cache.New(cache.Config{
Next: func(c *fiber.Ctx) bool {
return c.Query("noCache") == "true"
},
Expiration: 30 * time.Minute,
CacheControl: true,
}))
或者,您可以像这样自定义键和过期时间
app.Use(cache.New(cache.Config{
ExpirationGenerator: func(c *fiber.Ctx, cfg *cache.Config) time.Duration {
newCacheTime, _ := strconv.Atoi(c.GetRespHeader("Cache-Time", "600"))
return time.Second * time.Duration(newCacheTime)
},
KeyGenerator: func(c *fiber.Ctx) string {
return utils.CopyString(c.Path())
},
}))
app.Get("/", func(c *fiber.Ctx) error {
c.Response().Header.Add("Cache-Time", "6000")
return c.SendString("hi")
})
配置
属性 | 类型 | 说明 | 默认值 |
---|---|---|---|
下一个 | func(*fiber.Ctx) bool | Next 定义一个在创建缓存条目之前执行的函数,可用于在不创建缓存的情况下执行请求。如果条目已存在,它将被使用。如果您希望在某些情况下完全绕过缓存功能,则应使用 skip 中间件。 | nil |
过期 | time.Duration | 过期是缓存响应的有效期。 | 1 * time.Minute |
CacheHeader | string | CacheHeader 是响应头上的头,指示缓存状态,可能的返回值为“命中”、“未命中”或“无法访问”。 | X-Cache |
CacheControl | bool | 如果 CacheControl 设置为 true,则启用客户端缓存。 | false |
KeyGenerator | func(*fiber.Ctx) string | Key 允许您生成自定义键。 | func(c *fiber.Ctx) string { return utils.CopyString(c.Path()) } |
ExpirationGenerator | func(*fiber.Ctx, *cache.Config) time.Duration | ExpirationGenerator 允许您根据请求生成自定义过期键。 | nil |
存储 | fiber.Storage | Store 用于存储中间件的状态。 | 内存存储 |
Store(已弃用) | fiber.Storage | 已弃用:改用 Storage。 | 内存存储 |
Key(已弃用) | func(*fiber.Ctx) string | 已弃用:改用 KeyGenerator。 | nil |
StoreResponseHeaders | bool | StoreResponseHeaders 允许您存储由下一个中间件和处理程序生成的附加头。 | false |
MaxBytes | uint | MaxBytes 是同时存储在缓存中的响应正文的最大字节数。 | 0 (无限制) |
方法 | []string | Methods 指定要缓存的 HTTP 方法。 | []string{fiber.MethodGet, fiber.MethodHead} |
默认配置
var ConfigDefault = Config{
Next: nil,
Expiration: 1 * time.Minute,
CacheHeader: "X-Cache",
CacheControl: false,
KeyGenerator: func(c *fiber.Ctx) string {
return utils.CopyString(c.Path())
},
ExpirationGenerator: nil,
StoreResponseHeaders: false,
Storage: nil,
MaxBytes: 0,
Methods: []string{fiber.MethodGet, fiber.MethodHead},
}