package store import ( "sync" "time" ) // Redis 降级时的进程内 ticket 兜底:仅供本地开发/单实例。带惰性过期,避免泄漏。 var ( memTicketMu sync.Mutex memTickets = map[string]memTicketEntry{} ) type memTicketEntry struct { value string expireAt time.Time } func memTicketSet(ticket, value string, ttl time.Duration) { memTicketMu.Lock() defer memTicketMu.Unlock() memTickets[ticket] = memTicketEntry{value: value, expireAt: time.Now().Add(ttl)} // 顺带清理已过期项(登录频率低,全表扫无压力) now := time.Now() for k, e := range memTickets { if now.After(e.expireAt) { delete(memTickets, k) } } } func memTicketGet(ticket string) string { memTicketMu.Lock() defer memTicketMu.Unlock() e, ok := memTickets[ticket] if !ok || time.Now().After(e.expireAt) { return "" } return e.value }