- /scan 永遠秒回當前 Redis 快取,若 TTL < STALE_THRESHOLD 或 key 不存在,用 daemon thread 呼叫 radar_fetcher.main() 非同步更新 - 以 Redis SET NX EX 當互斥 lock(pokemon:radar:fetching,TTL 180s)避免並發 fetcher - 新增設定:STALE_THRESHOLD=120、FETCH_LOCK_KEY、FETCH_LOCK_TTL=180 - 原本需要 cron 定期跑 fetcher;現在 API 端會自動觸發,沒人打就不動 驗證: - cold start /scan: 26ms 回空、同時搶 lock - 背景 fetcher 跑完(~16s Function Server)後寫入 Redis 並釋放 lock - 下一次 /scan 13ms 回 96 筆、TTL 299s - 快取新鮮時重複打 /scan 不會重複觸發(refresh counter=1) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
7.1 KiB
7.1 KiB