go 进阶 三方库之 go版本 ThreadLocal

一. github.com/go-eden/routine

  1. go版本T和readLocal, 参考博客
  2. 通过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()}
  1. 提供中间件,接收到请求后,将数据缓存到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
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值