php - 寻找API优化建议

标签 php mysql api memcached redis

过去,我曾问过一些关于如何创建自己的 API 以允许外部站点访问我存储在数据库中的数据库的问题。这个特定的问题是我要求有关如何优化外部站点的 API 访问以帮助降低本地服务器负载的建议。首先,API 的设置方式是使用 MySQL 保存数据并使用 php 来提供数据。 API 本身由 URL 调用,URL 中包含 API key 。例如:

http://mysite.com/get_listings.php?key=somekey

然后我的脚本执行上述操作所需的操作,然后以 json 格式返回结果。目前,该 API 每月服务 10-15k 个唯一调用,我将添加另一组网站,除了 API 现在提供的服务之外,每月还将引入另外 20-30k 个唯一调用。没有进行缓存,它只是通过 php 脚本直接调用我的 API,并且每次调用都会查询 MySQL 数据库。它返回的数据类型基本上是故事和个人资料信息,而调用则包括最新故事、故事作者的个人资料和故事详细信息等。

除了正常的 php 代码优化以及优化 MySQL 查询和索引之外,您能否建议任何其他优化技术来帮助降低服务器负载并仍然快速向外部站点提供 API?我知道外部站点本身也应该进行某种缓存。但就我而言,您是否建议缓存数据库的结果然后提供缓存服务?如果是这样,使用 memcache 是一个不错的选择吗?或者也许将 json 结果存储在 redis 中?或者也许一个简单的文件缓存系统就可以工作?除了缓存还有什么吗?显然,服务器硬件可以产生影响,但超出了本文的范围。不过我会说,我将获得一个全新的服务器,专门用于执行此操作。

我确实有 root 权限来安装其他软件(如果有帮助的话)。

最佳答案

除非您有能力通过额外的只读节点来扩展 mysql,否则您真的应该开始使用 Redis 或 Memcached。 Redis 可能更擅长处理复杂的数据类型。这是一个食谱。

  1. https://github.com/nicolasff/phpredis - 安装这个,它将帮助您从 PHP 无缝地与 Redis 交互。
  2. 按某些键对您的请求进行分类。例如 get_listings.php?key=somekey 可能会使用 $redis->hget('listings',$somekey);
  3. 存储序列化结果或 JSON 格式的结果。
  4. 当数据库更新时,请务必销毁或更新Redis中的相关索引。如果您使用 MVC 后端,那么模型行为处理程序可以为您做到这一点。例如,当发布新评论时,更新 Redis 排序列表。
  5. 您可以混合搭配不同的结构。例如,从排序列表中获取键,然后从哈希中提取实际数据。

如果您使用 Redis 进行永久存储,请确保您的 PHP 知道如何清理它。根据我的经验,尽管我仍然将数据存储在 MySQL 中,但事实证明它具有相当的弹性。

如果你了解的话,Redis 就很棒 computation complexities .

关于php - 寻找API优化建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7392599/

相关文章:

php - SUM 与 MYSQL 中的 JOIN 表给出错误的结果

c# - 将 csv 内容发布到 HTTP API C#

php - 如何知道字段是否为空?

php - 如何在 wampserver 中安装 php 8?

php - 获取具有最新时间的行mysql codeigniter

java - 我的数据库类太大/编码很差,我怎样才能让它变得更好?

javascript - 使用ajax的表单不发送电子邮件

java - 我不知道如何在同一个程序中执行多个查询

rest - Magento 2 : create order with REST API

python - 不支持获取请求方法 'GET' - Python