bilibili-backup/library/net/http/blademaster/middleware/cache/cache.go

39 lines
837 B
Go
Raw Normal View History

2019-04-22 10:59:20 +08:00
package cache
import (
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/cache/store"
)
// Cache is the abstract struct for any cache impl
type Cache struct {
store store.Store
}
// Filter is used to check is cache required for every request
type Filter func(*bm.Context) bool
// Policy is used to abstract different cache policy
type Policy interface {
Key(*bm.Context) string
Handler(store.Store) bm.HandlerFunc
}
// New will create a new Cache struct
func New(store store.Store) *Cache {
c := &Cache{
store: store,
}
return c
}
// Cache is used to mark path as customized cache policy
func (c *Cache) Cache(policy Policy, filter Filter) bm.HandlerFunc {
return func(ctx *bm.Context) {
if filter != nil && !filter(ctx) {
return
}
policy.Handler(c.store)(ctx)
}
}