如何在闪亮的服务器中缓存数据?

时间:2016-03-16 04:36:29

标签: r shiny-server shiny

我正在使用R在网络上部署应用程序,但我的应用程序从中获取数据的网址是我的应用程序需要时间的地方所以有没有办法可以缓存这些数据? 因为我试图安装软件包备忘录,R.cache以及其他一些服务器都不支持

2 个答案:

答案 0 :(得分:3)

我建议Jason Bryer尝试DataCache套餐。该软件包可以通过GitHub获得,我今天成功地将它用于我正在开发的Shiny应用程序。

该软件包的主要功能是data.cache。您需要定义一个函数,该函数生成要缓存的对象列表,然后将您定义的函数作为参数传递给data.cache。如果您打算在应用程序中缓存多个对象列表,我还建议设置cache.name data.cache参数。

例如:

DataCache::data.cache(
  function(){
    list(
      normal_random_numbers = rnorm(10),
      uniform_random_numbers = runif(10)
    )
  },
  cache.name = 'my_random_numbers'
)

上面的代码在本地环境中创建了两个对象normal_random_numbersuniform_random_numbers,并将这些对象缓存到文件系统。再次运行此代码时,将使用这些对象的缓存副本而不是重新生成 - 除非缓存过期。 frequency data.cache参数用于设置缓存的到期时间,默认设置为daily

如果您在Windows下运行该应用程序,请使用该程序包的this slightly modified version。这是为了解决---一个显然是由于缓存文件名与Windows文件系统不兼容而导致的错误。

答案 1 :(得分:0)

This来自Rstudio的文章非常详尽,并引导您完成实现该目标的不同方法(即磁盘缓存,storr软件包或Redis实例)。

主要逻辑围绕渲染缓存元素并设置逻辑使缓存失效:

function(input, output) {
  renderCachedPlot(
    {
      # Code for a beautiful plot
    },
    # A change in the input or the dataframe will invalidate the cache
    cacheKeyExpr = list({ input$n, df() }) 
  )
}