在 Sinatra 中缓存响应的最佳方式?

2024-05-08

我正在使用我用 Sinatra 制作的 API 构建一个简单的应用程序,该 API 返回一些 JSON。这是相当多的 JSON,我的应用程序的 API 依赖于对其他 API 的数百个请求。

我大概可以将结果缓存 5 天左右,数据完全没有问题。我只是不是 100% 确定如何实现缓存。我该如何与 Sinatra 合作呢?


就我个人而言,相对于 memcached,我更喜欢使用 redis 来处理此类事情。我有一个应用程序,我非常广泛地使用 redis,使用它的方式与您所描述的类似。如果我进行未缓存的调用,页面加载时间将超过 5 秒,而使用 redis,加载时间将降至 0.3 秒左右。您还可以设置过期时间,该时间可以很容易地更改。我会做这样的事情来从缓存中检索数据。

require 'redis'
get '/my_data/:id' do
  redis = Redis.new
  if redis[params[:id]]
    send_file redis[params[:id]], :type => 'application/json'
  end
end

然后当你想将数据保存到缓存时,也许是这样的:

require 'redis'
redis = Redis.new
<make API calls here and build your JSON>
redis[id] = json
redis.expire(id, 3600*24*5)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Sinatra 中缓存响应的最佳方式? 的相关文章

随机推荐

  • CSS 3 从底部渐变 n 像素 - Webkit/Safari

    有没有办法创建带有停止点的渐变n距离元素底部边缘的像素 例如 对于 Moz Firefox 它看起来像 moz linear gradient center bottom f00 2 d00 31px 还应该注意的是 该渐变有一个伴随渐变
  • 当工作站锁定然后解锁时,如何防止窗口大小调整?

    我们有一个在多显示器环境中运行的应用程序 用户通常将应用程序对话框分散到多个监视器上 如果用户锁定工作站 然后解锁它 我们的应用程序就会被告知调整大小 我们的用户发现这种行为令人沮丧 因为他们随后花了一些时间恢复以前的布局 我们还不确定是图
  • MySql:将多项选择数据存储在数据库中

    我的表单中有一个复选框列表 用户可以选择其中任何一个 也可以选择全部 认为用户选择他感兴趣的运动类型 我需要最好的数据库结构来存储这个用户选择 这样 将来我就可以获得所有这些数据 我想 我无法将每个 用户 ID 运动 选择作为新行存储在数据
  • 仅为一个通用命令处理程序注册 Autofac 装饰器

    我们有很多通用命令处理程序 它们由 Autofac 以开放通用方式注册 我们有几个装饰器来装饰所有的手柄 现在我需要仅为一个命令处理程序注册一个装饰器 而不影响所有其他命令处理程序 这是我的尝试 但我似乎没有正确注册 这是与我们的代码类似的
  • 将向量作为绑定传递给 for 宏时出现问题

    我有任意数量的列表 我想使用 for 宏来处理它们 我想创建一个传递向量作为绑定的函数 因为列表的数量各不相同 如果我对绑定进行硬编码 它会按我的预期工作 gt def list1 pink green gt def list2 dog c
  • 字段的特定 MessageBodyWriter

    假设我在 JAX RS 1 环境 带有 Jackson 提供程序的 RestEasy 2 中有一个数据类 如下所示 class Foo int id String name Bar bar with Bar being class Bar
  • 创建响应式 SVG 剪辑路径 / 使 SVG 响应式

    我正在尝试使用创建响应式 SVG 剪辑路径
  • HTML5 -

    Reading 一篇文章 http html5doctor com the article element on the
  • 如何在expressjs中调用另一个api?

    我有一个这样的API app get test req res gt console log this is test 和另一个API app get check req res gt I want to call test api wit
  • 如何显示图像的其他图像是无

    经过我认真思考后 我只是不知道我的代码有什么问题以及如何修改它 问题是这样的 当用户插入 url 时 如果该 url 是指向 youtube 的链接 则需要显示 youtube 缩略图 如果该网址不是 YouTube 视频的链接 则需要显示
  • 加载列表之前确定ListView的高度

    是否可以在将 ListView 呈现在屏幕上之前确定其高度 如果我的 ListView 有 3 个项目 并且高度仅限于这 3 个项目 并且 ListView 不占据整个屏幕的高度 我可以在 Android 在屏幕上显示项目之前确定高度吗 使
  • 我是否需要注册 APN 才能在 iOS 中使用 GCM 推送通知?

    我正在用 cordova 构建一个混合应用程序 我正在使用phonegap plugin push 注册到GCM 这样我就可以将通知推送到Android 我的问题是我是否需要 APNs 证书才能在 iOS 中使用 GCM 或者仅使用插件并注
  • 为什么Intellij IDEA在nodejs中显示require undefined?

    有谁知道为什么intellij IDEA强调需要 我怎样才能解决这个问题 我在 Windows 上使用 IntelliJ IDEA 15 0 3 也遇到了同样的问题 解决方案是 文件 gt 设置 gt 语言和框架 gt Nodejs 和 N
  • DocumentClientException“请求大小太大”

    我创建了 JSON byte length 太大 当我尝试使用 api java 时 documentClient createDocument getTodoCollection getSelfLink document null fal
  • Firebase Crashlytics 与 UncaughtExceptionHandler

    我集成了 Firebase Crashlytics 版本 2 9 1 来挖掘崩溃 以覆盖我的应用程序的性能和稳定性 如果应用程序有自己的 UncaughtExceptionHandler 则不会在 firebase crashlytics
  • 我们可以使用 python 变量来保存整个文件吗?

    假设我们知道所有文件都将被加载到内存中并且我们负担得起 在 python 变量中加载整个文件 可能是二进制文件 有哪些缺点 如果有 或限制 如果有 如果这在技术上是可行的 是否应该避免这种情况 为什么 关于文件大小问题 该解决方案的最大大小
  • 智能卡 CMS 解密

    我在用着充气城堡管理我的项目的加密功能 我设法使用CMS用于加密和解密 两个密钥都存储在我的文件系统中 a cert and a p12 这是我实际使用的两个函数 private static byte CmsEncrypt byte me
  • 有没有任何代码分析工具可以让我的工作变得更轻松? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我最近从一个刚刚退休的人那里继承了一个用托管 C 编写的程序 在花了一些时间挖掘之后 我可以诚实地说 至
  • Chrome 自定义选项卡的自定义关闭按钮

    是否可以覆盖 Android 中自定义 chrome 选项卡上默认关闭按钮的行为 例如 我们可以重定向到新的 Activity 或启动对话框 而不是仅仅关闭 chrome 选项卡吗 我不确定你是否能做到这一点 您可以尝试启动 CustomT
  • 在 Sinatra 中缓存响应的最佳方式?

    我正在使用我用 Sinatra 制作的 API 构建一个简单的应用程序 该 API 返回一些 JSON 这是相当多的 JSON 我的应用程序的 API 依赖于对其他 API 的数百个请求 我大概可以将结果缓存 5 天左右 数据完全没有问题