89 lines
1.5 KiB
Go
89 lines
1.5 KiB
Go
package cache
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
)
|
|
|
|
type (
|
|
// queryCacheCtx
|
|
queryCacheCtx struct{}
|
|
|
|
// queryCacheKeyCtx
|
|
queryCacheKeyCtx struct{}
|
|
|
|
// queryCacheTagCtx
|
|
queryCacheTagCtx struct{}
|
|
)
|
|
|
|
// NewKey
|
|
// @param ctx
|
|
// @param key
|
|
// @date 2022-07-02 08:11:44
|
|
func NewKey(ctx context.Context, key string) context.Context {
|
|
return context.WithValue(ctx, queryCacheKeyCtx{}, key)
|
|
}
|
|
|
|
// NewTag
|
|
// @param ctx
|
|
// @param key
|
|
// @date 2022-07-02 08:11:43
|
|
func NewTag(ctx context.Context, key string) context.Context {
|
|
return context.WithValue(ctx, queryCacheTagCtx{}, key)
|
|
}
|
|
|
|
// NewExpiration
|
|
// @param ctx
|
|
// @param ttl
|
|
// @date 2022-07-02 08:11:41
|
|
func NewExpiration(ctx context.Context, ttl time.Duration) context.Context {
|
|
return context.WithValue(ctx, queryCacheCtx{}, ttl)
|
|
}
|
|
|
|
// FromExpiration
|
|
// @param ctx
|
|
// @date 2022-07-02 08:11:40
|
|
func FromExpiration(ctx context.Context) (time.Duration, bool) {
|
|
value := ctx.Value(queryCacheCtx{})
|
|
|
|
if value != nil {
|
|
if t, ok := value.(time.Duration); ok {
|
|
return t, true
|
|
}
|
|
}
|
|
|
|
return 0, false
|
|
}
|
|
|
|
// FromKey
|
|
// @param ctx
|
|
// @date 2022-07-02 08:11:39
|
|
func FromKey(ctx context.Context) (string, bool) {
|
|
value := ctx.Value(queryCacheKeyCtx{})
|
|
|
|
if value != nil {
|
|
if t, ok := value.(string); ok {
|
|
return t, true
|
|
}
|
|
|
|
}
|
|
|
|
return "", false
|
|
}
|
|
|
|
// FromTag
|
|
// @param ctx
|
|
// @date 2022-07-02 08:11:37
|
|
func FromTag(ctx context.Context) (string, bool) {
|
|
value := ctx.Value(queryCacheTagCtx{})
|
|
|
|
if value != nil {
|
|
if t, ok := value.(string); ok {
|
|
return t, true
|
|
}
|
|
|
|
}
|
|
|
|
return "", false
|
|
}
|