一. github.com/go-eden/routine
- go版本T和readLocal, 参考博客
- 通过routine.LocalStorage提供内存级别缓存,提供增删方法
import (
"github.com/go-eden/routine"
"github.com/kataras/iris"
)
type ContextCache struct {
LocalStorage routine.LocalStorage
}
func (c *ContextCache) Set(ctx iris.Context) {
c.LocalStorage.Set(ctx)
}
func (c *ContextCache) Get() iris.Context {
val := c.LocalStorage.Get()
if ctx, ok := val.(iris.Context); ok {
return ctx
}
return nil
}
func (c *ContextCache) Del() {
c.LocalStorage.Del()
}
var ContextStorage = ContextCache{routine.NewLocalStorage()}
- 提供中间件,接收到请求后,将数据缓存到LocalStorage,执行返回前将缓存的数据删除,防止内存溢出
import (
"github.com/kataras/iris/context"
"pms_mgr/log"
"pms_mgr/util/common"
)
func CacheMiddleWare() context.Handler {
return func(ctx context.Context) {
log.InfoLog(ctx.GetHeader("msgid"), "GrayRelease_Trace[hotelCode] : %s", ctx.GetHeader("hotelCode"))
log.InfoLog(ctx.GetHeader("msgid"), "GrayRelease_Trace[x-asm-prefer-tag] : %s", ctx.GetHeader("x-asm-prefer-tag"))
log.InfoLog(ctx.GetHeader("msgid"), "GrayRelease_Trace[x-request-id] : %s", ctx.GetHeader("x-request-id"))
common.ContextStorage.Set(ctx)
ctx.Next()
common.ContextStorage.Del()
return
}
}