iT邦幫忙

0

Day17.快取與過期策略

  • 分享至 

  • xImage
  •  

前言
昨天我把「資料每天怎麼流動」分成平常版和尖峰版。今天要把這條路線再具體一點,說清楚:哪些資料可以暫存(快取)、可以存多久、超過多久要丟掉重抓、抓不到時要不要先給舊的。這樣之後不管是 Postman 測試、n8n 排程,或前端畫面要顯示「資料更新於 …」都能對得起來。
一、為什麼要做快取
•省力氣:固定資料不會一直變,沒必要每次開畫面都重抓。
•比較穩定:來源暫時抓不到時,可以先給上一份資料,畫面不會整個空掉。
•保護來源:很多人同時查同一筆資料,後端只要被打一次就好。
•好說明:畫面可以寫「資料更新於 08:30」,使用者知道這不是這一秒的資料,就不會誤會。
二、要快取哪些資料、哪些不要

  1. 一定可以快取的
    •/bus/routes(路線清單):建議快取 30 分鐘~1 小時,路線不會一天改很多次。
    •/bus/stops(站點清單):建議快取 30 分鐘~1 小時,站點也不會一直變。
    這兩個可以在文件裡寫成「固定資料預設快取 1800~3600 秒」。
  2. 要看情境的(即時)
    •個人查詢/使用者自己點的到站:建議快取 10~15 秒,在這段時間內不要一直打同一站。
    •大看板/一次顯示很多站:建議快取 20~30 秒,統一時間刷新,不然會打太多次來源。
    三、過期(TTL)要怎麼寫
    我們前面都說時間一律用 ISO 8601、持續時間用秒。快取也可以這樣規定:回應裡面多帶 cacheUntil(快取到什麼時候)和 cacheTtlSeconds(這次快取多久)。
    四、何時要強制更新(一定要重抓)
    •使用者主動按「重新整理/更新到站時間」。
    •資料超過我們自己定的 SLO(例如說 30 秒要更新一次,結果已經 45 秒)。
    •上一次回來的是非正常狀態(noData、suspended、last),要再查一次確認。
    •偵測到路線或站點有異動,就要重抓對應的固定資料。
    •排程有跑(例如每天 07:00 抓一次),就照排程重抓。
    五、快取壞掉時要顯示什麼
    •主文案:暫時使用前一筆資料。
    •副文案:資料更新於 2025-10-30T08:30:15+08:00。
    •必要時再加:來源連線異常,稍後自動重試。
    這樣使用者就知道不是「沒有車」,是「現在拿不到最新的」,體驗會好很多。
    六、快取表
    類型 API 建議快取時間 過期後動作 備註
    固定資料 /bus/routes 30–60 分鐘 直接重抓 少變動,可以排程重抓
    固定資料 /bus/stops 30–60 分鐘 直接重抓 routeId/direction 異動要重抓
    即時資料(個人) /bus/eta 10–15 秒 先給舊的+背景重抓 要一起顯示 updateTime
    即時資料(看板) /bus/eta 20–30 秒 先給舊的+背景重抓 尖峰時段建議由系統統一抓

圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言