From f558f78e1ce5918732f5ab7127f5c472fba50c1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Wed, 7 May 2025 17:39:30 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=93=E5=AD=98=E9=A2=84=E7=83=AD=E5=8D=87?= =?UTF-8?q?=E7=BA=A7lockKey=E5=8D=87=E7=BA=A7=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- httpclient/client.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/httpclient/client.go b/httpclient/client.go index a04b873..097b7cb 100644 --- a/httpclient/client.go +++ b/httpclient/client.go @@ -10,6 +10,7 @@ package httpclient import ( "fmt" "git.zhangdeman.cn/zhangdeman/network/httpclient/implement" + "git.zhangdeman.cn/zhangdeman/wrapper" "net" "strings" "time" @@ -297,8 +298,9 @@ func (hc *HttpClient) Request() *define.Response { "remaining_ttl": ttl, }, hc.reqCfg) // 配置了最小剩余时间,并且key剩余有效期小于最小剩余时间 - // 预热加锁, 并发请求触发预热, 仅触发一个即可, 使用接口做key - if err := hc.reqOption.CacheInstance.Lock(hc.reqCfg.FullUrl); err != nil { + // 预热加锁, 并发请求触发预热, 仅触发一个即可, 使用接口做key + query参数做key, 按照一般约定, 写请求不会做缓存, 只有读请求会 + lockKey := wrapper.String(hc.reqCfg.FullUrl + serialize.JSON.MarshalForStringIgnoreError(hc.reqCfg.Query)).Md5().Value + if err := hc.reqOption.CacheInstance.Lock(lockKey); err != nil { log.RecordWarn("接口请求命中缓存, 缓存结果有效期大于剩余时长小于配置阈值, 触发预热, 加锁失败, 未执行预热", map[string]any{ "min_ttl": cachePreHeatConfig.MinTTL, "remaining_ttl": ttl, @@ -312,7 +314,7 @@ func (hc *HttpClient) Request() *define.Response { "lock_key": hc.reqCfg.FullUrl, }, hc.reqCfg) _ = hc.requestBackendApi() - if err := hc.reqOption.CacheInstance.Unlock(hc.reqCfg.FullUrl); nil != err { + if err := hc.reqOption.CacheInstance.Unlock(lockKey); nil != err { log.RecordError("接口请求命中缓存, 缓存结果有效期大于剩余时长小于配置阈值, 触发预热, 执行预热后, 释放锁失败", map[string]any{ "min_ttl": cachePreHeatConfig.MinTTL, "remaining_ttl": ttl,