缓存预热加锁
This commit is contained in:
@ -220,10 +220,13 @@ func (hc *HttpClient) Request() *define.Response {
|
||||
return hc.requestBackendApi()
|
||||
}
|
||||
// 上面若命中缓存, 则后续缓存实例不可能为nil, 无需判断
|
||||
// TODO : 预热加锁, 并发请求触发预热, 仅触发一个即可
|
||||
// 判断是否开启预热
|
||||
cachePreHeatConfig := hc.reqConfig.CacheInstance.PreHeatConfig()
|
||||
log.RecordDebug("接口请求命中缓存", map[string]any{
|
||||
if nil == cachePreHeatConfig {
|
||||
log.RecordDebug("接口请求命中缓存, PreHeatConfig未返回预热配置, 不做预热处理", map[string]any{}, hc.reqConfig)
|
||||
return nil
|
||||
}
|
||||
log.RecordDebug("接口请求命中缓存, 进行预热策略处理", map[string]any{
|
||||
"cache_info": cacheResult.CacheInfo,
|
||||
}, hc.reqConfig)
|
||||
defer func() {
|
||||
@ -285,7 +288,35 @@ func (hc *HttpClient) Request() *define.Response {
|
||||
"remaining_ttl": ttl,
|
||||
}, hc.reqConfig)
|
||||
// 配置了最小剩余时间,并且key剩余有效期小于最小剩余时间
|
||||
// 预热加锁, 并发请求触发预热, 仅触发一个即可, 使用接口做key
|
||||
if err := hc.reqConfig.CacheInstance.Lock(hc.reqConfig.FullUrl); err != nil {
|
||||
log.RecordWarn("接口请求命中缓存, 缓存结果有效期大于剩余时长小于配置阈值, 触发预热, 加锁失败, 未执行预热", map[string]any{
|
||||
"min_ttl": cachePreHeatConfig.MinTTL,
|
||||
"remaining_ttl": ttl,
|
||||
"err_msg": err.Error(),
|
||||
}, hc.reqConfig)
|
||||
return
|
||||
}
|
||||
log.RecordDebug("接口请求命中缓存, 缓存结果有效期大于剩余时长小于配置阈值, 触发预热, 加锁成功, 执行预热", map[string]any{
|
||||
"min_ttl": cachePreHeatConfig.MinTTL,
|
||||
"remaining_ttl": ttl,
|
||||
"lock_key": hc.reqConfig.FullUrl,
|
||||
}, hc.reqConfig)
|
||||
_ = hc.requestBackendApi()
|
||||
if err := hc.reqConfig.CacheInstance.Unlock(hc.reqConfig.FullUrl); nil != err {
|
||||
log.RecordError("接口请求命中缓存, 缓存结果有效期大于剩余时长小于配置阈值, 触发预热, 执行预热后, 释放锁失败", map[string]any{
|
||||
"min_ttl": cachePreHeatConfig.MinTTL,
|
||||
"remaining_ttl": ttl,
|
||||
"lock_key": hc.reqConfig.FullUrl,
|
||||
"err_msg": err.Error(),
|
||||
}, hc.reqConfig)
|
||||
return
|
||||
}
|
||||
log.RecordDebug("接口请求命中缓存, 缓存结果有效期大于剩余时长小于配置阈值, 触发预热, 执行预热后, 释放锁成功", map[string]any{
|
||||
"min_ttl": cachePreHeatConfig.MinTTL,
|
||||
"remaining_ttl": ttl,
|
||||
"lock_key": hc.reqConfig.FullUrl,
|
||||
}, hc.reqConfig)
|
||||
}()
|
||||
}()
|
||||
// 命中缓存必然请求成功, 直接记录成功日志即可
|
||||
|
Reference in New Issue
Block a user