php - 限制 Api Calls,api 在 php 模板中
问题描述
我试图限制 api 调用的频率。
api 调用在页面模板中
<?php
$producturl = 'theapiurl';
$product_json = file_get_contents($producturl);
$product_array = json_decode($product_json, true);
$price = min(array_column($product_array['products'][0]['offerData']['offers'],'price'));
?>
some html
<?php echo $price ?>
我想要的是例如每 12 小时调用一次 api(数据不会经常更改),并且如果在 12 小时内第二次加载模板,则不会再次调用 api,但 $price 输出应该仍然工作。
这可能吗?
解决方案
答案取决于您对服务器的访问权限以及获取新数据的容易/快速程度。
您可以按照 Gnudiff 的建议进行操作,并使用 cron 命令按计划获取数据,然后将其存储在数据库中,以便您在每个响应中返回。
或者你可以使用像 Redis 这样的内存存储来缓存数据。当用户调用端点时,您检查缓存以查看它是否存在。由于它不存在,因此请获取您的数据,将其存储在缓存中,并在 12 小时结束时过期的数据上使用 TTL,然后将其返回给用户。以下请求都遵循相同的过程,如果存在则从缓存中返回,如果不存在则获取最新数据,然后将其返回给用户。
推荐阅读
- javascript - 逃生系统出现javascript错误
- java - 打印并行运行的多个 SSH 命令的输出
- java - 如何将最后添加的文档放在recyclerview的底部?
- javascript - 如何在 DataTables 中将过滤类型从 LIKE 更改为 EQUAL
- c# - 无法使垂直滚动条在用户控件中始终可见
- android - 在firebase数据库中,我可以存储项目符号,其他符号吗?如果是,如何?
- python - selenium instagram bot,但 xpath 不工作
- python - 一个单元格python中的PDF数据到csv
- amazon-web-services - 包装 S3 URL 并从下载文件中删除 S3 url
- asp.net - 实体框架 - “上下文正在代码优先模式下使用,代码是从 EDMX 文件生成的......”