寻找API优化建议

时间:2011-09-12 18:58:29

标签: php mysql api memcached redis

过去我曾问过几个关于如何创建自己的API的问题,以允许外部站点访问数据库中的db I store。这个特殊问题是我要求提供有关如何优化外部站点的API访问以帮助保持本地服务器负载的建议。首先,API的设置方式是使用MySQL来保存数据和php来提供数据。 API本身由URL中的API密钥调用。例如:

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

然后我的脚本执行上述操作所需的操作,然后以json格式返回结果。目前,该API每月提供10-15k个独立呼叫,我正在添加另一组网站,这些网站将在API现在服务的基础上每月带来另外20-30k个独立呼叫。没有缓存,只是通过php脚本直接调用我的API,它每次调用都会查询MySQL数据库。它返回的数据类型基本上是故事和个人资料信息,而电话则是最新故事,故事作者简介和故事详情。

除了PHP代码的正常优化和优化MySQL查询和索引之外,您还可以建议任何其他优化技术,这些技术可以帮助保持服务器负载下降并仍然快速为外部站点提供API吗?我知道外部网站本身也应该在他们的最后进行某种缓存。但是在我的结尾你建议缓存db中的结果然后提供缓存吗?如果是这样,使用memcache会是一个不错的选择吗?或者将json结果存储在redis中?或者一个简单的文件缓存系统可能会工作?缓存以外的任何东西?显然,服务器硬件可以有所作为,但超出了本文的范围。我会说,虽然我将获得一个全新的服务器,只会致力于这样做。

如果有帮助的话,我有root权限来安装其他软件。

1 个答案:

答案 0 :(得分:3)

除非您具有使用其他只读节点扩展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. 您可以混合搭配不同的结构。例如,从排序列表中获取密钥,然后从散列中提取实际数据。
  6. 如果您使用redis进行永久存储,请确保您的PHP知道如何清理它。根据我的经验,虽然我仍然在MySQL中存储数据,但结果却非常有弹性。

    如果您了解computation complexities,Redis会很棒。