1
0
mirror of https://github.com/silenceper/wechat.git synced 2026-02-11 16:22:26 +08:00

使用双检锁优化 Token 获取 (#444)

This commit is contained in:
2021-08-26 10:34:24 +08:00
committed by GitHub
parent c61154105b
commit 80d91d8316
2 changed files with 19 additions and 11 deletions

View File

@@ -42,16 +42,20 @@ type ResTicket struct {
//GetTicket 获取jsapi_ticket
func (js *DefaultJsTicket) GetTicket(accessToken string) (ticketStr string, err error) {
//先从cache中取
jsAPITicketCacheKey := fmt.Sprintf("%s_jsapi_ticket_%s", js.cacheKeyPrefix, js.appID)
if val := js.cache.Get(jsAPITicketCacheKey); val != nil {
return val.(string), nil
}
js.jsAPITicketLock.Lock()
defer js.jsAPITicketLock.Unlock()
//先从cache中
jsAPITicketCacheKey := fmt.Sprintf("%s_jsapi_ticket_%s", js.cacheKeyPrefix, js.appID)
val := js.cache.Get(jsAPITicketCacheKey)
if val != nil {
ticketStr = val.(string)
return
// 双检,防止重复从微信服务器获
if val := js.cache.Get(jsAPITicketCacheKey); val != nil {
return val.(string), nil
}
var ticket ResTicket
ticket, err = GetTicketFromServer(accessToken)
if err != nil {