【问题标题】:How to cache data in shiny server?如何在闪亮的服务器中缓存数据?
【发布时间】:2016-07-01 19:31:41
【问题描述】:

我正在使用 R 在 Web 上部署应用程序,但我的应用程序从中获取数据的 URL 是我的应用程序需要时间的地方。是否可以缓存该数据? 我尝试安装 memoise、R.cache 和其他一些服务器不支持的软件包。

【问题讨论】:

    标签: r shiny-server shiny


    【解决方案1】:

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

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

    例如:

    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,并将它们缓存到文件系统中。当您再次运行此代码时,这些对象的缓存副本将被使用而不是重新生成 - 当然,除非缓存过期。 data.cachefrequency参数用于设置缓存的过期时间,默认设置为daily

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

    【讨论】:

      【解决方案2】:

      来自 Rstudio 的This 文章非常详尽,并引导您通过不同的方式来实现这一目标(即磁盘缓存、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() }) 
        )
      }
      

      【讨论】:

        猜你喜欢
        • 2016-10-26
        • 2020-01-26
        • 1970-01-01
        • 2021-11-07
        • 2021-03-10
        • 2023-03-23
        • 2021-01-03
        • 2016-05-23
        • 2015-10-05
        相关资源
        最近更新 更多