You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shiny中存储数据并设置定期更新,解决数据源访问超时问题

解决方案

完全可以实现「本地缓存+定期自动更新」的功能,最优实现逻辑为缓存优先、过期刷新、异常降级,既适配数据源数月更新的低频特性,也能解决外部站点临时不可用的问题,具体实现如下:

核心逻辑

  • 首次运行时拉取远端数据,存储到本地作为缓存
  • 后续运行优先读取本地缓存,无需每次请求远端站点
  • 当本地缓存距离上次更新超过设定阈值(比如90天,匹配数据源更新频率)时,才尝试拉取新数据更新缓存
  • 若远端站点请求失败(超时/不可用),直接使用本地缓存兜底,不打断Shiny应用运行

可直接复用的代码

library(data.table)

# 自定义配置项
cache_file <- "mei_data_local.csv" # 本地缓存文件路径
update_interval_days <- 90 # 自动更新周期,可根据数据源更新频率调整

dM1 <- tryCatch({
  # 缓存存在且未过期,直接读本地
  if (file.exists(cache_file)) {
    cache_last_update <- file.info(cache_file)$mtime
    if (difftime(Sys.time(), cache_last_update, units = "days") < update_interval_days) {
      return(fread(cache_file))
    }
  }
  # 缓存不存在/已过期,拉取新数据
  new_data <- fread('https://psl.noaa.gov/data/correlation/mei.data', header = FALSE, fill = TRUE)
  # 更新本地缓存
  fwrite(new_data, cache_file)
  new_data
}, error = function(err) {
  # 拉取失败时兜底逻辑
  if (file.exists(cache_file)) {
    warning("数据源站点暂不可用,已加载本地缓存数据")
    return(fread(cache_file))
  }
  stop("首次运行无本地缓存,且数据源站点无法访问,请稍后重试")
})

部署可选优化

如果你的Shiny应用部署在Linux服务器上,可以额外配置cron定时任务,每3个月自动执行一次数据拉取脚本更新缓存,无需等待用户访问应用时触发更新,稳定性更强。

内容的提问来源于stack exchange,提问作者Vishnupriya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 12:24:02