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

修改

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