提交 fa27152e authored 作者: mooncake9527's avatar mooncake9527

修改

上级 f090300d
......@@ -46,7 +46,7 @@ func NewMemoryCache(keyPrefix string, encode encoding.Encoding, newObject func()
}
}
const logPrefix = "[ristretto]"
const logPrefix = "[memory]"
// Set data
func (m *memoryCache) Set(ctx context.Context, key string, val interface{}, expiration time.Duration) error {
......@@ -63,7 +63,13 @@ func (m *memoryCache) Set(ctx context.Context, key string, val interface{}, expi
}
st := time.Now()
ok := m.client.SetWithTTL(cacheKey, buf, 0, expiration)
logger.Info(fmt.Sprintf("%s set %s", logPrefix, cacheKey), logger.Any("ok", ok), logger.Any("val", prettyBytes(buf)), logger.Any("cost", time.Since(st).String()), logger.Any("expiration", expiration.String()), ctxUtil.CtxTraceIDField(ctx))
logger.Info(fmt.Sprintf("%s set", logPrefix),
logger.Any("result", isSuccess(ok)),
logger.Any("key", cacheKey),
logger.Any("val", prettyBytes(buf)),
logger.Any("cost", time.Since(st).String()),
logger.Any("expiration", expiration.String()),
ctxUtil.CtxTraceIDField(ctx))
if !ok {
return xerror.New("SetWithTTL failed")
}
......@@ -71,6 +77,13 @@ func (m *memoryCache) Set(ctx context.Context, key string, val interface{}, expi
return nil
}
func isSuccess(result bool) string {
if result {
return "ok"
}
return "no"
}
func (m *memoryCache) IncrBy(ctx context.Context, key string, val int64) (int64, error) {
cacheKey, err := BuildCacheKey(m.KeyPrefix, key)
if err != nil {
......@@ -84,7 +97,12 @@ func (m *memoryCache) IncrBy(ctx context.Context, key string, val int64) (int64,
st := time.Now()
cur := cast.ToInt64(v)
_ = m.client.Set(cacheKey, cur+val, 0)
logger.Info(fmt.Sprintf("%s incrby %s", logPrefix, cacheKey), logger.Any("ok", ok), logger.Any("cost", time.Since(st).String()), logger.Any("result", val), ctxUtil.CtxTraceIDField(ctx))
logger.Info(fmt.Sprintf("%s incrby", logPrefix),
logger.Any("result", isSuccess(ok)),
logger.Any("key", cacheKey),
logger.Any("val", val),
logger.Any("cost", time.Since(st).String()),
ctxUtil.CtxTraceIDField(ctx))
return cur + val, nil
}
......@@ -98,7 +116,11 @@ func (m *memoryCache) Get(ctx context.Context, key string, val interface{}) erro
st := time.Now()
data, ok := m.client.Get(cacheKey)
if !ok {
logger.Info(fmt.Sprintf("%s get %s", logPrefix, cacheKey), logger.Any("ok", ok), logger.Any("cost", time.Since(st).String()), ctxUtil.CtxTraceIDField(ctx))
logger.Info(fmt.Sprintf("%s get", logPrefix),
logger.Any("result", isSuccess(ok)),
logger.Any("key", cacheKey),
logger.Any("cost", time.Since(st).String()),
ctxUtil.CtxTraceIDField(ctx))
return CacheNotFound
}
......@@ -107,7 +129,12 @@ func (m *memoryCache) Get(ctx context.Context, key string, val interface{}) erro
return xerror.Errorf("data type error, key=%s, type=%T", key, data)
}
if len(dataBytes) == 0 || bytes.Equal(dataBytes, NotFoundPlaceholderBytes) {
logger.Info(fmt.Sprintf("%s get %s", logPrefix, cacheKey), logger.Any("ok", ok), logger.Any("result", "NotFoundPlaceholder"), ctxUtil.CtxTraceIDField(ctx))
logger.Info(fmt.Sprintf("%s get", logPrefix),
logger.Any("result", isSuccess(ok)),
logger.Any("key", cacheKey),
logger.Any("val", NotFoundPlaceholder),
logger.Any("cost", time.Since(st).String()),
ctxUtil.CtxTraceIDField(ctx))
return ErrPlaceholder
}
......@@ -116,7 +143,12 @@ func (m *memoryCache) Get(ctx context.Context, key string, val interface{}) erro
return xerror.Errorf("encoding.Unmarshal error: %v, key=%s, cacheKey=%s, type=%T, data=%s ",
err, key, cacheKey, val, dataBytes)
}
logger.Info(fmt.Sprintf("%s get %s", logPrefix, cacheKey), logger.Any("ok", ok), logger.Any("cost", time.Since(st).String()), logger.Any("result", prettyVal(val)), ctxUtil.CtxTraceIDField(ctx))
logger.Info(fmt.Sprintf("%s get", logPrefix),
logger.Any("result", isSuccess(ok)),
logger.Any("key", cacheKey),
logger.Any("val", prettyVal(val)),
logger.Any("cost", time.Since(st).String()),
ctxUtil.CtxTraceIDField(ctx))
return nil
}
......@@ -133,7 +165,10 @@ func (m *memoryCache) Del(ctx context.Context, keys ...string) error {
}
st := time.Now()
m.client.Del(cacheKey)
logger.Info(fmt.Sprintf("%s del %s", logPrefix, cacheKey), logger.Any("cost", time.Since(st).String()), ctxUtil.CtxTraceIDField(ctx))
logger.Info(fmt.Sprintf("%s del", logPrefix),
logger.Any("key", cacheKey),
logger.Any("cost", time.Since(st).String()),
ctxUtil.CtxTraceIDField(ctx))
return nil
}
......@@ -171,7 +206,12 @@ func (m *memoryCache) MGet(ctx context.Context, keys []string) ([]any, error) {
for i, key := range keys {
rs[i], _ = m.client.Get(key)
}
logger.Info(fmt.Sprintf("%s: mget %s", logPrefix, xslice.Join(keys, " ")), logger.Any("result", rs), logger.Any("cost", time.Since(st).String()), logger.Any("expiration", DefaultNotFoundExpireTime.String()), ctxUtil.CtxTraceIDField(ctx))
logger.Info(fmt.Sprintf("%s mget", logPrefix),
logger.Any("key", xslice.Join(keys, " ")),
logger.Any("val", rs),
logger.Any("cost", time.Since(st).String()),
logger.Any("expiration", DefaultNotFoundExpireTime.String()),
ctxUtil.CtxTraceIDField(ctx))
return rs, nil
}
......@@ -186,7 +226,12 @@ func (m *memoryCache) SetCacheWithNotFound(ctx context.Context, key string) erro
if !ok {
return xerror.New("SetWithTTL failed")
}
logger.Info(fmt.Sprintf("%s: set %s [NotFound]", logPrefix, cacheKey), logger.Any("ok", ok), logger.Any("cost", time.Since(st).String()), logger.Any("expiration", DefaultNotFoundExpireTime.String()), ctxUtil.CtxTraceIDField(ctx))
logger.Info(fmt.Sprintf("%s set", logPrefix),
logger.Any("result", isSuccess(ok)),
logger.Any("key", cacheKey),
logger.Any("val", "NotFound"),
logger.Any("cost", time.Since(st).String()),
logger.Any("expiration", DefaultNotFoundExpireTime.String()),
ctxUtil.CtxTraceIDField(ctx))
return nil
}
......@@ -23,7 +23,7 @@ const (
KeyShopID = "shopID"
KeyUName = "uname"
KeyToken = "token"
KeyUser = "user"
KeyCost = "cost"
)
var (
......
......@@ -2,6 +2,7 @@ package middleware
import (
"context"
"fmt"
ctxUtil "gitlab.wanzhuangkj.com/tush/xpkg/gin/ctxUtils"
"net/http"
"strconv"
......@@ -17,6 +18,7 @@ type RequestIDOption func(*requestIDOptions)
type requestIDOptions struct {
contextRequestIDKey string
headerXRequestIDKey string
appName string
}
func defaultRequestIDOptions() *requestIDOptions {
......@@ -50,6 +52,11 @@ func WithContextRequestIDKey(key string) RequestIDOption {
o.contextRequestIDKey = key
}
}
func WithAppName(key string) RequestIDOption {
return func(o *requestIDOptions) {
o.appName = key
}
}
// WithHeaderRequestIDKey set header request id key, minimum length of 4
func WithHeaderRequestIDKey(key string) RequestIDOption {
......@@ -79,6 +86,7 @@ func RequestID(opts ...RequestIDOption) gin.HandlerFunc {
return func(c *gin.Context) {
// Check for incoming header, use it if exists
requestID := c.Request.Header.Get(ctxUtil.HeaderXRequestIDKey)
//costs := c.Request.Header.Values(ctxUtil.KeyCost)
// Create request id
if requestID == "" {
......@@ -91,10 +99,11 @@ func RequestID(opts ...RequestIDOption) gin.HandlerFunc {
// Set X-Request-Id header
c.Writer.Header().Set(ctxUtil.HeaderXRequestIDKey, requestID)
startTime := time.Now()
c.Next()
//costs = append(costs, fmt.Sprintf("%s-%d", o.appName, time.Since(startTime).Milliseconds()))
c.Writer.Header().Set(ctxUtil.HeaderXTimestampKey, strconv.FormatInt(time.Now().Unix(), 10))
c.Writer.Header().Add(ctxUtil.KeyCost, fmt.Sprintf("%s-%d", o.appName, time.Since(startTime).Milliseconds()))
}
}
......
......@@ -42,6 +42,7 @@ func (x LogHook) ProcessHook(next redis.ProcessHook) redis.ProcessHook {
if err != nil {
if x.logger != nil {
x.logger.Info(Pretty(fmt.Sprintf("%s %s", logPrefix, cmd.String()), max),
logger.String("result", "fail"),
logger.Any("err", err),
logger.String("cost", time.Since(st).String()),
logger.String("line", line),
......@@ -51,6 +52,7 @@ func (x LogHook) ProcessHook(next redis.ProcessHook) redis.ProcessHook {
}
if x.logger != nil {
x.logger.Info(Pretty(fmt.Sprintf("%s %s", logPrefix, cmd.String()), max),
logger.String("result", "no"),
logger.String("cost", time.Since(st).String()),
logger.String("line", line),
ctxUtil.CtxTraceIDField(ctx))
......
package xsf
import (
"fmt"
"reflect"
"testing"
)
......@@ -33,3 +34,10 @@ func TestID_MarshalJSON(t *testing.T) {
})
}
}
func TestID_String(t *testing.T) {
Init(10)
for i := 0; i < 10; i++ {
fmt.Println(Generate().String())
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论